Haskell列表理解错误

时间:2018-08-05 19:23:01

标签: haskell

我今天才刚开始学习Haskell,但其语法完全不知所措。

我正在尝试将数学计算应用于项目列表。

例如,假设我想使用列表理解来对列表中的每个项目进行平方。

我的尝试

myfunc (n:lis) = [ k | k <-lis, k == k^k]

result_list = myfunc[1..]

take 10 result_list

我对myfunc代码的理解:列出并遍历存储在变量k中的元素,并将k设置为其平方。

在我执行take命令并按Enter键之后,该进程显然正在运行,但没有执行任何操作。

请注意,我想使用列表理解作为一种方法。我可以使用map来实现我的目标。

1 个答案:

答案 0 :(得分:4)

您误解了列表理解。

[ k | k <- lis, k == k^k ]

k == k^k子句是 filter – –它仅保留满足此等式的列表元素。 (==是一个返回布尔值的比较运算符,这是一个提示)。您看不到输出的原因是[1..]中没有满足该方程式的数字。但是我们遇到了无限循环,因为我们不断检查越来越多的数字以查看它们是否满足要求。

可以尝试的东西

[ k | k <- lis, k < 100 ]

关于如何获取正方形列表,请使用这样的理解

[ k^2 | k <- lis ]

如果您想要更原始的措辞,则可以在列表理解范围内进行let绑定:

[ r | k <- lis, let r = k^2 ]

您的代码还有其他问题,但一次只能迈出一步!祝你好运!