查找一个浮点值,而不是另一个值哈斯克尔



我必须找到一个不高于给定值的高度。我找到了为整数列表执行此操作的代码。但我需要它来接受浮点值,即 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

现在,它适用于IntFloat以及Ord类型类的每个实例。

实际上,这是编译器推断的实际countElems类型。您的版本仅限于 a = Float

我使用它:

countElems :: Float -> [Float] -> Int countElems _ [] = 0 countElems n (x:xs) | n < x = 1 + (tallerthan n xs) | otherwise = tallerthan n xs

最新更新