2016-02-25 58 views
1
(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

不,它在内部转换为命名的lambda。嵌套隐藏了不在相同词法范围内的任何代码的定义。 – WorBlux

回答

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

+0

我明白了,谢谢你清理它! – neo

+0

@YoungSande http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work。 :) –

+0

@WillNess,对不起我的坏! – neo

相关问题