我必须找到一个不高于给定值的高度。我找到了为整数列表执行此操作的代码。但我需要它来接受浮点值,即 countElems :: Float -> Heights -> Int
.我知道我必须使用 fromIntegral 来允许浮点值,但我不知道如何实现它。这是我到目前为止所拥有的:
countElems :: Int -> [Int] -> Int
countElems n (x:xs) = fromEnum (n < x) + countElems n xs
countElems _ [] = 0
只需编辑countElems
类型注释即可接受任何有序类型:
countElems :: Ord a => a -> [a] -> Int
countElems n (x:xs) = fromEnum (n < x) + countElems n xs
countElems _ [] = 0
现在,它适用于Int
和Float
以及Ord
类型类的每个实例。
实际上,这是编译器推断的实际countElems
类型。您的版本仅限于 a = Float
。
我使用它:
countElems :: Float -> [Float] -> Int
countElems _ [] = 0
countElems n (x:xs)
| n < x = 1 + (tallerthan n xs)
| otherwise = tallerthan n xs