获取输入列表中的数字在给定范围内

时间:2018-05-06 21:42:56

标签: haskell

我有一个功能

givenRange:: Int -> Int -> [Int] -> Int

我希望实施givenRange low hi xs,以便返回xslowhi之间的值的数量。

例如:

givenRange 2 4 [1,2,3,4,5] == 3  -- 2, 3, 4
givenRange 5 7 [1,2,3] == 0

2 个答案:

答案 0 :(得分:0)

filter (\x -> x >= low && x <= hi) xs

为您提供范围内的数字。然后拿走长度。

答案 1 :(得分:0)

这并不简单。我认为,范围内的范围的概念最好用相等测试(==)来处理。范围内的范围最好使用take.drop对生成。如果两者不匹配则00匹配的可能性不大。我测试了0 5 [5..12],9 13 [5..12]以及更多。看起来很健壮。什么不能假设任何范围是完全顺序的。 Equality(==)是检查每个元素的最快方法。

gr s e ls = if [s..e] == (take lls.drop (s-(ls!!0)) $ ls)
            then lls 
            else 0 
      where lls = length [s..e]