我想要一个函数,它采用列表初始值的乘积并复制其元素。
例如列表是:[2, 3, 4, 5]
。
其 inits 的乘积:[1, 2, 6, 24, 120]
。
最后,列表应如下所示:[1, 1, 2, 2, 2, 6, 6, 6, 6, 24, 24, 24, 24, 24]
.
我的问题是不[1, 2, 6, 24, 120]
应该改变,但我无法解决它,我对haskell很陌生。您不需要修改此代码,您可以新建一个。
makeSystem :: Integral a => [a] -> [a]
makeSystem l= replicate (l !! 0) ((map product(inits l))!!0) ++ asd (tail l) where
inits [] = [[]]
inits (x:xs) = [[]] ++ map (x:) (inits xs)
另一个例子:makeSystem [5,2,5,2,5,2]
结果:[1, 1, 1, 1, 1, 5, 5, 10, 10, 10, 10, 10, 50, 50, 100, 100, 100, 100, 100, 500, 500]