我不太了解 lambda 函数。这是 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
的第二个参数。至少我认为这就是正在发生的事情!
我不明白的是我的匿名函数在哪里获取 (lambda (edge)
中的 edge
的值。如果有人能解释一下,我将不胜感激对我来说。
最佳答案
edge
参数来自(cdr node)
中的项目。对于 (cdr node)
中的每个元素,您的内部 lambda 将被调用一次。
例如试试这个:
(mapc #'princ '(1 2 3 4 5))
或者,使用文字 lambda:
(mapc #'(lambda (x)
(princ x)
(terpri))
'(1 2 3 4 5))
关于lambda - Land of Lisp 中关于 lisp Lambda 函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7438745/