(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