わかりました基本的に、次の場合にオプション1または2のどちらが適用されるかを知るのに問題があります。
naturals = 0 : map (+ 1) naturals
オプションは次
のとおりです。 1.実行はひどいもので、すべてが各ステップで再計算されます。
naturals = [0]
naturals' = 0:map (+ 1) [0] // == [0, 1]
naturals'' = 0:map (+ 1) [0, 1] // == [0, 1, 2]
naturals''' = 0:map (+ 1) [0, 1, 2] // == [0, 1, 2, 3]
naturals'''' = 0:map (+ 1) [0, 1, 2, 3] // == [0, 1, 2, 3, 4]
2.実行はひどいものではありません。リストは常に無限で、map
一度だけ適用されます
naturals = 0:something
|
naturals' = 0: map (+ 1) (0: something)
|
naturals'' = 0:1: map (+ 1) (0:1: something')
|
naturals''' = 0:1:2: map (+ 1) (0:1:2: something'')
|
naturals'''' = 0:1:2:3:map (+ 1) (0:1:2:3:something''')
が実行中の場所を|
示しmap
ます。
答えが1つか2つだけかもしれないことは知っていますが、最後の疑問を解消するために、共再帰に関する良い説明へのいくつかの指針をいただければ幸いです:)