2017-01-26 4 views
0

を溶解し、私は次のようしているラムダ計算:ラムダ計算

(λx. + (- x 1)) 9 3 

右のベータ版が削減は次のとおりです。

+ (- 9 1) 3 

私がミスを犯し、数3取った代わりの9:

+ (- 3 1) 9 

と同じ結果が得られました。

解決策と比較するまで、間違っていると私は気づいていませんでした。

最も近い置換を取る必要がありますか?この場合は9ですか?

答えて

7

この算術演算の例で同じ答えが得られたという事実は、ラムダ計算ではなく算術演算によるものです。あなたが期間構造より明確にするために多くのスペースを書いた場合

、構文解析ツリーを示す根拠のない余分な括弧で、

(\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 
1

はい、「最初の」(一番左の)引数には常にラムダを適用する必要があります。

理論的には、複数の引数のようなものはありません。単一の引数の適用だけがあります。それでも、繰り返し適用の場合は f M N Oと書いてください。(((f M) N) O)fが引数としてMを受け取る方法に注意してください。

一般的に、異なる順序でアプリケーションを実行すると、同じ結果が得られません。あなたの例は事件だけでした。

関連する問題