私は関数型プログラミングが初めてで、怠惰な評価がどのように機能しているのかを明確にしたいと思います。 (私は理解していること、しかし、それは決して実際に起こる)、メモリが不足するまで、最初のものは、すべての自然数のリストを取得し、遅延評価はどのように機能しますか?
nats = 0:(map (+1) nats)
test = foldr (\x y-> if x > 2 then 0 else x+y) 10 nats
そして、私の知る限り、と私は、次のような機能を持っています2番目のものはまさに何をすることになっていますか?テストでは、xとyを取得し、x> 2かつx + y elseの場合は2を返すラムダ計算関数の内部にありますが、x = 10であるため0を返すことになっていますか?私は少し混乱しています。その場合、ナットは本当に呼び出されていますか?
EDIT: テストは3を返しますが、今はどのように理解できないので本当に混乱しています。
ルーキーの間違いをしていると申し訳ありませんが、これがどう機能するのか理解できません。
あなたは単に後方にそれを持っている: 'X'が使用され、nats' 'の要素の上の範囲、および '10'場合にのみ、最後のに使用されます'nats'が満たされます。これは、' 10'が決して使用されないことを意味します。 'foldr'は' 0+(1+(2+(0)) 'を計算します。ここで最後の0は' x = 3> 2'で 'if'を0にします。 – chi