2012-04-04 40 views
1

即時嘗試從let表單轉換爲unamed過程表單,我只是無法得到它的竅門。我需要幫助轉換let表單和未命名的過程表單

let程序就是這樣。

(define max-recursive (lambda (lst) 
     (if (null? (cdr lst)) 
      (car lst) 
      (let ((m0 (car lst)) 
       (m1 (max-recursive (cdr lst)))) 
       (if (> m0 m1) 
        m0 
        m1 
       ) 
      ) 
    ))) 

,什麼我目前所做的就是這個

(define max-recursive (lambda (lst) 
     (if (null? (cdr lst)) 
     (car lst) 
((lambda (m0 m1) 
    (if (> m0 m1) 
     m0 
     m1 
    ) 
    ) 
    car lst (max-recursive (cdr lst))) 
    ))) 

任何幫助,將不勝感激謝謝。

回答

4

你幾乎明白了!在表達式car lst附近只有幾個括號丟失。試試這個:

(define max-recursive 
    (lambda (lst) 
    (if (null? (cdr lst)) 
     (car lst) 
     ((lambda (m0 m1) 
      (if (> m0 m1) 
       m0 
       m1)) 
     (car lst) ;here was the error 
     (max-recursive (cdr lst)))))) 

解釋如下。甲let形式像這樣的:

(let ((x 10)) 
    x) 

...是用於施加到某些參數的lambda表達只是語法糖。先前let等效於此:

((lambda (x) 
    x) 
10) 

請注意,在這兩種情況下的值10結束綁定到名爲x變量,let表達式的主體是一樣的lambda表達

的主體
+0

謝謝,但我在發帖後幾分鐘就知道了。 – wyatt 2012-04-05 02:57:39