相关疑难解决方法(0)

如何判断列表是否无限?

有没有办法判断Haskell中的列表是否无限?原因是我不想将函数length应用于无限列表.

haskell list infinite

41
推荐指数
5
解决办法
5170
查看次数

为什么GHC不能推理一些无限的名单?

这个最近的问题让我想到了Haskell使用无限列表的能力.有大量 其他问题,并约在计算器上无限列表答案,我明白了为什么我们不能对所有无限列表的通用解决方案,但为什么不能哈斯克尔推理一些无限列表?

让我们使用第一个链接问题中的示例:

list1 = [1..]
list2 = [x | x <- list1, x <= 4]
print list2
$ [1,2,3,4
Run Code Online (Sandbox Code Playgroud)

@ user2297560在评论中写道:

假装你是GHCI.您的用户会为您提供无限列表,并要求您查找该列表中小于或等于4的所有值.您将如何进行此操作?(请记住,您不知道列表是否有序.)

在这种情况下,用户没有给你一个无限的列表.GHC产生了它!实际上,它是按照自己的规则生成的.该哈斯克尔2010标准规定如下:

enumFrom       :: a -> [a]            -- [n..]  
Run Code Online (Sandbox Code Playgroud)

对于Int和Integer类型,枚举函数具有以下含义:

  • 序列enumFrom e1是列表[ e1,e1+ 1,e1+ 2,...].

在他对另一个问题的回答中,@ chepner写道:

你知道列表是单调递增的,但Haskell没有.

这些用户所做的陈述似乎与我的标准不符.Haskell使用单调增加以有序的方式创建了列表.Haskell 应该知道列表是有序的和单调的.那么为什么不能将这个无限列表自动[x | x <- list1, x <= 4]转化takeWhile (<= 4) list1呢?

haskell list ghc compiler-optimization

3
推荐指数
2
解决办法
161
查看次数

标签 统计

haskell ×2

list ×2

compiler-optimization ×1

ghc ×1

infinite ×1