を使用せずに Haskell で左から右にリストを作成する方法はあります++か?
cons一定時間の操作であり、コードを効率的に保ちたい. Haskell の怠惰さを利用してこのようなことを行う一般的な方法があるように感じますが、思いつきません。
現在、コラッツ シーケンスを作成する関数を作成していますが、間違った方向にリストを作成しています。
module CollatzSequence where
collatz :: (Integral a) => a -> [a] -> [a];
collatz n l
| n <= 0 = error "Enter a starting number > 0"
collatz n [] = collatz n [n]
collatz n l@(x:_)
| x == 1 = l
| even x = collatz n ((div x 2):l)
| otherwise = collatz n ((x*3 + 1):l)
GHCiでは:
*CollatzSequence> collatz 13 []
[1,2,4,8,16,5,10,20,40,13]