Paul Graham の ANSI Common Lisp page 110 の例を説明できる人はいますか?
この例では、 &rest と lambda を使用して関数型プログラミング機能を作成する方法を説明しようとしています。それらの 1 つは、関数の引数を構成する関数です。それがどのように機能したかを説明するものは何も見つかりません。コードは次のとおりです。
(defun compose (&rest fns)
(destructuring-bind (fn1 . rest) (reverse fns)
#'(lambda (&rest args)
(reduce #'(lambda (v f) (funcall f v))
rest
:initial-value (apply fn1 args)))))
使用法は次のとおりです。
(mapcar (compose #'list #'round #'sqrt)
'(4 9 16 25))
出力は次のとおりです。
((2) (3) (4) (5))
2 行目と 6 行目は特に魔法のように見えます。