例如,我正在为列表编写一些函数,我想使用长度函数
foo :: [a] -> Bool
foo xs = length xs == 100
有人怎么能理解这个函数是否可以与无限列表一起使用?
或者我应该总是考虑无限列表并使用这样的东西
foo :: [a] -> Bool
foo xs = length (take 101 xs) == 100
而不是直接使用长度?
如果 haskell 有 FiniteList 类型怎么办,那么 length 和 foo 会是
length :: FiniteList a -> Int
foo :: FiniteList a -> Bool
最佳答案
length
遍历整个列表,但要确定列表是否具有特定长度 n
你只需要看第一个n
元素。
您对 take
的使用想法将工作。或者
你可以写一个lengthIs
像这样的功能:
-- assume n >= 0
lengthIs 0 [] = True
lengthIs 0 _ = False
lengthIs n [] = False
lengthIs n (x:xs) = lengthIs (n-1) xs
你可以用同样的思路写
lengthIsAtLeast
和 lengthIsAtMost
变体。
关于list - 有没有办法分开无限列表和有限列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33016410/