2016-02-25 76 views
1
(define (map2 liste1 liste2) 
    (define (gj x y) 
    (/ (+ x y) 2)) 
    (if (or (null? liste1) (null? liste2)) 
     '() 
     (cons (gj (car liste1) (car liste2)) (map2 (cdr liste1) (cdr liste2))))) 

程序gj是一個匿名程序,因爲它在另一個程序中?不知道我是否瞭解匿名程序

+0

不,它在內部轉換爲命名的lambda。嵌套隱藏了不在相同詞法範圍內的任何代碼的定義。 – WorBlux

回答

2

gj不是匿名的,因爲它有一個名稱,只有在map2範圍內才能看到。的匿名程序

例子是:

> ((lambda (x) (* 2 x)) 10) 
    ^^^^^^^^^^^^^^^^^^^^ 
20 

> (map (lambda (x) (+ x 1)) '(10 20 30)) 
     ^^^^^^^^^^^^^^^^^^^^ 
'(11 21 31) 

其不具有名稱和定義它們的表達後不能被引用。

注意

(define (gj x y) 
    (/ (+ x y) 2)) 

相同

(define gj 
    (lambda (x y) 
    (/ (+ x y) 2))) 

所以這裏的程序,勢必標識gj,因此它不再是匿名的。

+0

我明白了,謝謝你清理它! – neo

+0

@YoungSande http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work。 :) –

+0

@WillNess,對不起我的壞! – neo

相關問題