我有一个功能
givenRange:: Int -> Int -> [Int] -> Int
我希望实施givenRange low hi xs
,以便返回xs
中low
和hi
之间的值的数量。
例如:
givenRange 2 4 [1,2,3,4,5] == 3 -- 2, 3, 4
givenRange 5 7 [1,2,3] == 0
答案 0 :(得分:0)
filter (\x -> x >= low && x <= hi) xs
为您提供范围内的数字。然后拿走长度。
答案 1 :(得分:0)
这并不简单。我认为,范围内的范围的概念最好用相等测试(==)来处理。范围内的范围最好使用take.drop
对生成。如果两者不匹配则0
。 0
匹配的可能性不大。我测试了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]