如何在Haskell中编写powerList
函数?我希望用n
乘法运算构建这样一个列表,其中每个元素是前一个元素的简单倍数,而不是指数操作的n
。在Haskell中计算`[1,x^1,x^2,...,x^n]`
理想情况下,实现是干净的,惯用的Haskell,并且相当高效。
-- powerList x n -> [1, x, x^2, ..., x^n]
-- For example:
-- powerList 2 0 -> [1]
-- powerList 2 1 -> [1, 2]
-- powerList 2 2 -> [1, 2, 4]
-- powerList 2 3 -> [1, 2, 4, 8]
-- powerList 2 4 -> [1, 2, 4, 8, 16]
powerList :: forall a. Integral a => a -> a -> [a]
powerList _ 0 = [1]
powerList x n = [] -- ???
太棒了!谢谢!将在计时器允许时接受。 – clay
Haskell奇妙地允许无限形式[0,1 ..]所以你可以 (\ kx-> map(k ^)$ take(x + 1)[0,1 ..])2 4 它产生[1 ,2,4,8,16] 此外,我不明白为什么要求4值应该产生5.(X + 1)应该是X和结果[1,2,4,8] – fpmora
但是,而不是使用take来限制无限生成器,直接使用n .... (\ kn - > map(k ^)[0..n])2 4但是这会产生5个值[1,2,4,8, 16] – fpmora