リストの初期化の積を取り、その要素を複製する関数が必要です。
たとえば、リストは次のとおり[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]