我不太了解 lambda 函数。这是 Lisp Land of Lisp 一书中的示例函数:
(defun edges->dot (edges)
(mapc (lambda (node)
(mapc (lambda (edge)
(fresh-line)
(princ (dot-name (car node)))
(princ "->")
(princ (dot-name (car edge)))
(princ "[label=\"")
(princ (dot-label (cdr edge)))
(princ "\"];"))
(cdr node)))
edges))
现在让我们看看这里的内部部分:
(mapc (lambda (edge)
(fresh-line)
(princ (dot-name (car node)))
(princ "->")
(princ (dot-name (car edge)))
(princ "[label=\"")
(princ (dot-label (cdr edge)))
(princ "\"];"))
(cdr node)))
我知道该函数mapc
有两个参数,一个函数和一个列表。我也明白,通过使用lambda (node)
,我传递了一个匿名函数,该函数将一个参数 ( node
) 作为 的第一个参数mapc
,并将(cdr node)
用作 的第二个参数mapc
。至少我认为这是怎么回事!
我不明白的是我的匿名函数在哪里获得edge
in的值(lambda (edge)
。如果有人可以向我解释这一点,我将不胜感激。