2014-11-20 67 views
0

我必须找到一个不高于给定值的高度。我已经找到代码来完成一个整数列表。但我需要它接受一个浮点值,即countElems :: Float -> Heights -> Int。我知道我必须使用从整体来允许浮点值,但我不知道如何实现它。这是我到目前为止有:找到一个不超过另一个值的浮点值haskell

countElems :: Int -> [Int] -> Int 
countElems n (x:xs) = fromEnum (n < x) + countElems n xs 
countElems _ []  = 0 
+0

什么是'Heights'?你能否更详细地描述你的问题,假设我们不知道你想解决的问题(因为我们不知道)? – bheklilr 2014-11-20 19:43:20

+0

它是通过countElems 150(tall_short) – caz 2014-11-20 19:53:33

+0

导入的整数列表,你能解释为什么以及如何做,因为我的老师几乎不会说英语,也不能教一个更好的园丁哭。 – caz 2014-11-20 19:55:29

回答

1

只要编辑countElems类型的注释接受任何命令类型:

countElems :: Ord a => a -> [a] -> Int 
countElems n (x:xs) = fromEnum (n < x) + countElems n xs 
countElems _ []  = 0 

现在既适用IntFloatOrd型类的每个实例。

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

+1

这会比'countElems n xs = length'更加地道。过滤(n <)xs',作为@caz的额外提示。 – bheklilr 2014-11-20 21:22:15

+0

谢谢,我会在早上起床时尝试有序的类型。谢谢你的帮助。这是我还没有教过的新方法。 @bheklilr – caz 2014-11-20 23:26:01

0

我用它来工作:

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