2013-04-25 110 views
0
(define test 
    (lambda() 
     (let* ((x 1) 
       (y 3) 
       (z 5) 
       (foo (lambda (n) 
        (let* ((x 3) 
          (y (+ x n)) 
          (g (lambda(w) (+ (* x w) y)))) 
         g)))) 
     ((foo 10) x)))) 

這是什麼評估?方案:該功能評估什麼?

嘗試:

呼叫(foo 10) - >(lambda(w) (+ x w) y),其中x = 3,Y = 13

呼叫((lambda(w) (+ (* x w) y) x) - >(其中,本地x是1) - >

+2

第一個'let *'中的圓括號是錯誤的,所以不可能說出它應該做什麼。請修復它。 – Barmar 2013-04-25 00:25:31

+0

我希望新的編輯有幫助。對於那個很抱歉。 – 2013-04-25 00:41:24

回答

1
(foo 10) => (lambda (w) (+ (* x w) y) ; where x = 3 and y = 13 
     => (lambda (w) (+ (* 3 w) 13) 

((foo 10) x) => (+ (* 3 w) 13) ; where w is 1 
      => (+ (* 3 1) 13) 
      => 16 

See here

不知道你從哪裏得到52。