6
私は固定小数点と再帰的定義の周りに頭を曲げようとしています。なぜhaskellの `fix`はタプルに問題があるようですか?
これは動作します:
>>> take 10 $ fix (\x -> (0:x))
[0,0,0,0,0,0,0,0,0,0]
は今、私は再帰的に定義されたペアをいじり始めるとします:
>>> take 10 $ let x = (0:x) in x
[0,0,0,0,0,0,0,0,0,0]
これはfix
の定義与えられた意味を成して同じことを、い
>>> take 10 $ fst $ let (u,v) = (0:v,1:u) in (u,v)
[0,1,0,1,0,1,0,1,0,1]
さて、私はでそれを書くことができるはずですも、そうですか?
>>> take 10 $ fst $ fix (\(u,v) -> (0:v,1:u))
*** Exception: <<loop>>
しかし、動作しません。
>>> take 10 $ fst $ fix (\r -> let (u,v)=r in (0:v,1:u))
[0,1,0,1,0,1,0,1,0,1]
最後の2つの例の重要な違いは何ですか?
これは '\(〜(u、v))'または '\〜(u、v)'でなければなりません。 – redneb
@redneb固定。 (意図された言葉遣い:-P) – chi