我需要创建一个函数“powers”,它接受一个数字 n 并将该数字的无限列表返回到每个数字的幂,例如
powers 2 = 2,4,8,16,32......
我需要使用非常特定的语言子集来执行此操作,其中我唯一可用的内置函数是:div、mod、even、odd、head、tail、not、null、length、reverse、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)
但我无法弄清楚如何在没有辅助函数的情况下让函数执行此操作。
例如,如果我要使用返回数字 x 的无限列表的函数 inflist,那么我可以执行以下操作。
powers = \n -> map (\x -> product(take x (inflist n))) (from 1)
但我不能这样做或任何类似的事情,因为我不能使用那个功能。
抱歉,如果符号与普通的 haskell 不同,它是使用此符号的非常严格的核心 haskell 子集。