を溶解し、私は次のようしているラムダ計算:ラムダ計算
(λx. + (- x 1)) 9 3
右のベータ版が削減は次のとおりです。
+ (- 9 1) 3
私がミスを犯し、数3取った代わりの9:
+ (- 3 1) 9
を
と同じ結果が得られました。
解決策と比較するまで、間違っていると私は気づいていませんでした。
最も近い置換を取る必要がありますか?この場合は9ですか?
を溶解し、私は次のようしているラムダ計算:ラムダ計算
(λx. + (- x 1)) 9 3
右のベータ版が削減は次のとおりです。
+ (- 9 1) 3
私がミスを犯し、数3取った代わりの9:
+ (- 3 1) 9
を
と同じ結果が得られました。
解決策と比較するまで、間違っていると私は気づいていませんでした。
最も近い置換を取る必要がありますか?この場合は9ですか?
この算術演算の例で同じ答えが得られたという事実は、ラムダ計算ではなく算術演算によるものです。あなたが期間構造より明確にするために多くのスペースを書いた場合
、構文解析ツリーを示す根拠のない余分な括弧で、
(\x. + (- x 1)) 9 3
手段に何が起こっているのか確認するために容易になるだろう
((\x. (+ (- x 1))) 9) 3
アプリケーションは左に(「私たちすべてが60年代にやったように」 - Roger Hindley)と関連しているからです。
したがって、3はxの代わりに間違った場所にあります。我々だけがある
((\x. (+ (- x 1))) 9) 3
=
(+ (- 9 1)) 3
=
(+ 8) 3
=
11
はい、「最初の」(一番左の)引数には常にラムダを適用する必要があります。
理論的には、複数の引数のようなものはありません。単一の引数の適用だけがあります。それでも、繰り返し適用の場合は f M N O
と書いてください。(((f M) N) O)
f
が引数としてM
を受け取る方法に注意してください。
一般的に、異なる順序でアプリケーションを実行すると、同じ結果が得られません。あなたの例は事件だけでした。