Infinite list of powers using subset of Haskell
我需要做一个函数"powers",它接受一个数字n,并将该数字的无限列表返回到每个数字的幂,例如。
1 | powers 2 = 2,4,8,16,32...... |
我需要使用非常特定的语言子集来完成这项工作,其中我唯一可用的内置函数是:div、mod、even、odd、head、tail、not、null、length、reverse、elem、map、filter、folder、sum、product、take、drop、takewhile、dropwhile、zipwith和from。
该子集也没有^运算符。
还有一些更重要的限制:
- 代码不能超过80个字符的1行
- 不允许使用"helper函数",即我不能在此定义中编写要使用的其他函数。
到目前为止,我的想法是这样的:
1 2 |
号
但是如果没有助手函数,我就无法理解如何让函数完成这项工作。
例如,如果我要使用一个函数inflist,它返回一个无限的数字x列表,那么我可以只执行以下操作。
但是我不能这样做,因为我不能使用这个函数。
抱歉,如果符号不同于普通的haskell,它是一个非常严格的核心haskell子集,使用了这个符号。
这是一个递归问题。
1 |
(允许使用
当洞察来临时,这是有趣和有趣的。在列表中连续生成2个较长的重复
1 | [ [ 2 | y <- [1..x]] | x <- [1..]] |
号
然后取每个列表的乘积。
确保在调用之前使用take x我努力用一个mod和多个mod函数来限制列表。
如果允许迭代。
。
将生成列表。
编辑:2018年4月4日
一个无限递归函数,可能是您想要填充函数的内容。可能是:
1 |
要生成一个列表,绝对需要组装一个列表,并且必须使用列表的最后一个元素来依次计算下一个元素。这也必须与take一起运行。下面的命令以1开始列表。它可以以任何数字开始,如64或63。我尝试将最后一个值作为参数传递,但函数不会生成列表。有一个选项,使用":"而不是"++",但它将生成列表中的每个元素。若要生成值列表而不是列表,请在"take"之前使用"concat$"将其清除。
1 |
。