繁体   English   中英

使用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。

该子集也没有^运算符。

还有其他一些重要的约束条件:

  • 代码不得超过1行,且不得超过80个字符
  • 不允许使用“帮助函数”,即我无法编写在此定义内使用的另一个函数。

到目前为止,我的想法是:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM