list - 有没有办法分开无限列表和有限列表?

标签 list haskell infinite

例如,我正在为列表编写一些函数,我想使用长度函数

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

你可以用同样的思路写lengthIsAtLeastlengthIsAtMost变体。

关于list - 有没有办法分开无限列表和有限列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33016410/

相关文章:

python - 如何对项目 :value list using another list with just items? 进行子集化

c++ - 如何使用区分大小写的元素对 std::list 进行排序?

haskell - 经验丰富的 Haskell 开发人员如何在*设计*时应对懒惰问题?

haskell - 如何删除Haskell中两个字符串列表之间的公共(public)元素?

haskell - 我怎么能优雅地不。 Haskell有吗?

javascript - 无法定位JavaScript程序中无限循环的原因

jquery - 使用 jQuery,如何删除列表项并将其移动到同一列表中的特定位置?

loops - 善变的预提交无限循环

Java - 超时(无限循环)错误

java - 将对象列表排序到特定成员/状态