Я не совсем понимаю лямбда-функции. Вот пример функции из книги 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
в (lambda (edge)
. Буду признателен, если кто-нибудь сможет объяснить мне это.