我正在尝试编写一个secondSmallest返回列表中第二个最小值的函数,如果没有这样的值,则返回Nothing.此外,如果列表的最小值出现多次,则它也是第二小的值.例如:
secondSmallest [1.0] - > NothingsecondSmallest [1,1,2] - > Just 1secondSmallest [5,3,7,2,3,1] - > Just 2这是我到目前为止所拥有的:
secondSmallest :: Ord a => [a] -> Maybe a
secondSmallest [] = Nothing
secondSmallest [x] = Nothing
secondSmallest (x:y:xs) = Just secondSmallest ((if x < y then x else y):xs)
Run Code Online (Sandbox Code Playgroud) 我试图计算输入列表中有多少数字在给定的低 - 高范围内.
这是我到目前为止所拥有的:
countRange :: Int -> Int -> [Int] -> Int
countRange _ _ [] = 0
countRange low high (x:xs) | (low < x) && (high > x) = 1 + (countRange low high xs)
| otherwise = countRange low high xs
Run Code Online (Sandbox Code Playgroud)
一些例子:
countRange 5 8 [] ==> 0countRange 1 3 [1,2,3,4,5] ==> 3函数countPalindromes接收一个字符串列表,并返回有多少字符串为回文的计数.
isPalindrome :: String -> Bool
isPalindrome w = w == reverse w
countPalindromes :: [String] -> Int
countPalindromes ss = length filter (== isPalindrome) ss
Run Code Online (Sandbox Code Playgroud)
我知道函数长度应用于两个参数而不是一个.我只是不知道如何解决这个问题?