不确定我是否理解匿名程序

时间:2016-02-25 19:39:59

标签: scheme

(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是匿名程序,因为它在另一个程序中吗?

1 个答案:

答案 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,因此它不再是匿名的。