aco*_*ell 5 haskell functional-programming
我正在尝试解决以下练习(我正在学习Haskell):
使用列表推导定义x ^ n.
我正在努力寻找解决方案.
使用递归或折叠,解决方案并不复杂(例如,foldr (*) 1 [x | c <- [1..n]]).但是,仅使用列表理解会变得困难(至少对我而言).
为了解决这个问题,我正在尝试创建一个x ^ n元素列表然后获取长度.生成x*n元素列表很容易,但是我无法生成x ^ n元素列表.
ppower x n = length [1 | p <- [1..x], c <- [1..n]]
Run Code Online (Sandbox Code Playgroud)
返回给出错误结果的x*n元素列表.任何有关这方面的想法将不胜感激.
正如 @nm 所建议的,我向 Richard Bird(《函数式编程简介》一书的作者,第一版,我在其中获得练习的书)询问了解决此练习的答案/指导。他很友善地回复了我,我在这里贴出他给我的答案:
由于列表推导式返回列表而不是数字,因此 x^n 不能定义为列表推导式的实例。你的解 x^n = 乘积 [x | c <- [1..n]] 是正确的。
所以,我想我会坚持我发布的解决方案(并因使用递归而被丢弃):
foldr (*) 1 [x | c <- [1..n]]
Run Code Online (Sandbox Code Playgroud)
他没有说任何关于使用列表推导式创建 x^n 元素列表(无递归)的事情,尽管@David Fletcher 和@nm 在他们的评论中指出,这可能是不可能的。