(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是一個匿名程序,因爲它在另一個程序中?不知道我是否瞭解匿名程序
(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是一個匿名程序,因爲它在另一個程序中?不知道我是否瞭解匿名程序
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
,因此它不再是匿名的。
不,它在內部轉換爲命名的lambda。嵌套隱藏了不在相同詞法範圍內的任何代碼的定義。 – WorBlux