我今天才刚开始学习Haskell,但其语法完全不知所措。
我正在尝试将数学计算应用于项目列表。
例如,假设我想使用列表理解来对列表中的每个项目进行平方。
我的尝试
myfunc (n:lis) = [ k | k <-lis, k == k^k]
result_list = myfunc[1..]
take 10 result_list
我对myfunc
代码的理解:列出并遍历存储在变量k中的元素,并将k设置为其平方。
在我执行take
命令并按Enter键之后,该进程显然正在运行,但没有执行任何操作。
请注意,我想使用列表理解作为一种方法。我可以使用map
来实现我的目标。
答案 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 ]
您的代码还有其他问题,但一次只能迈出一步!祝你好运!