2016-04-03 2 views
0

私はこの特定のスキームコードが36という値を返す理由を理解しようとしています。Schemeの次のコードは何を返します

(((lambda (fn) 
    (lambda(x)(fn (fn x)))) 
    (lambda (x) (* x 3))) 
4) 

誰かがこのコードを包括的に調べることができれば、私の研究に非常に役立ちます。ありがとうございました。

答えて

3

コードを評価するために置換原則を使用してください。あなたは簡単にどの表現がラムダ

(((lambda (fn) (lambda(x) (fn (fn x)))) (lambda (x) (* x 3))) 4) 

まずにプラグインすることができ、我々はfn

((lambda(x) ((lambda (x) (* x 3)) ((lambda (x) (* x 3)) x))) 4) 

ため(lambda (x) (* x 3))で代用します見ることができますので、あなたが行ったようにあなたのコードがきれいにインデント持つことは有用である今、私たちがします最も外側のx

((lambda (x) (* x 3)) ((lambda (x) (* x 3)) 4)) 

ため4で代替今、私たちは01で代用します右側ラムダにxために

((lambda (x) (* x 3)) (* 4 3)) 

x

(* 12 3) 

を評価(* 4 3)

((lambda (x) (* x 3)) 12) 

代替12について評価

36 
関連する問題