私はラムダ関数をよく理解していません。以下は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
関数は、関数とリストの 2 つの引数を取ることを理解しています。lambda (node)
また、 を使用することで、1 つの引数 ( node
) を の最初の引数として受け取りmapc
、それ(cdr node)
が の 2 番目の引数として使用される無名関数を渡すことになることも理解していmapc
ます。少なくとも私はそれが起こっていると思います!
私が理解していないのは、匿名関数が in の値を取得する場所edge
です(lambda (edge)
。誰かが私にこれを説明していただければ幸いです。