[英]How do I get an infinite list of powers using the below methods in haskell
[英]Infinite list of powers using subset of Haskell
我需要做一个函数“幂”,取一个数字n并将该数字的无穷列表返回给每个数字的幂,例如
powers 2 = 2,4,8,16,32......
我需要使用语言的非常具体的子集来执行此操作,其中我唯一可用的内置函数是:div,mod,偶数,奇数,头,尾巴,非,null,长度,反向,elem,map,filter,foldr,sum ,product,take,drop,takewhile,dropWhile,zipWith和from。
该子集也没有^运算符。
还有其他一些重要的约束条件:
到目前为止,我的想法是:
powers = \n -> map (\x -> "some function to get n to the power of x") (from 1)
但是我不知道如何在没有辅助函数的情况下获取该函数。
例如,如果我要使用一个函数inflist,该函数返回一个无数个x列表,那么我可以执行以下操作。
powers = \n -> map (\x -> product(take x (inflist n))) (from 1)
但我无法执行此操作或类似的操作,因为我无法使用该功能。
抱歉,如果表示法与常规的haskell不同,则它是使用此表示法的非常严格的核心haskell子集。
这是一个递归问题。
powers n = n : map (* n) (powers n)
(是否允许使用:
?)
当见识到来时,这很有趣,也很有趣。 在列表中连续生成2个更长的重复项
[ [ 2 | y <- [1..x]] | x <- [1..]]
然后取每个列表的乘积。
map product [ [ 2 | y <- [1..x]] | x <- [1..]]
确保在调用我尝试使用mod和多个mod函数限制列表的调用之前使用take x。
如果允许迭代。
take 24 $ iterate (2*) 2
将生成列表。
编辑4/4/2018
无限递归函数 ,可能就是您要填写的函数。 有可能:
pow l = l ++ pow [(last l * 2)]
要生成列表,绝对有必要组装一个列表,并且有必要使用列表的最后一个元素来依次计算下一个。 这也必须带走。 同样,下面的命令以1开头列表。可以以任何数字开头(例如64或63)。我尝试将最后一个值作为参数传递,但是该函数不会生成列表。 可以选择使用“:”代替“ ++”,但是它将产生列表中的每个元素。 要生成值列表而不是列表列表,请在使用“ take”进行清理之前使用“ concat $”。
take 10 $ pow [1]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.