我發現這個代碼,建立對應Thue-Morse sequence列表:交錯功能
thueMorse :: [Int]
thueMorse = 0 : interleave (map (1-) thueMorse) (tail thueMorse)
where interleave (x:xs) ys = x : interleave ys xs
這是完美的,可以創造奇蹟,但我不能換我的頭周圍。舉個例子:
> take 8 thueMorse
[0,1,1,0,1,0,0,1]
如果我在全球範圍定義interleave
功能,並使用它,我得到的,這是正確的,一個例外:
> let interleave (x:xs) ys = x : interleave ys xs
> interleave [1,2,3] [4,5,6]
[1,4,2,5,3,6*** Exception: <interactive>:29:5-47: Non-exhaustive patterns in function interleave
那麼,如何在上面的工作?是因爲它是一個無限的列表,所以它可以永遠交錯安全嗎?