不确定我是否理解匿名程序
Not sure if I understand anonymous procedures
(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
,因此它不再是匿名的。
(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
,因此它不再是匿名的。