(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 :(得分: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
,因此它不再是匿名的。