CommonLisp初心者スレ
■ このスレッドは過去ログ倉庫に格納されています
0045デフォルトの名無しさん
NGNGhttp://www.lispworks.com/reference/HyperSpec/Body/m_lambda.htm
> (lambda lambda-list [[declaration* | documentation]] form*)
> == (function (lambda lambda-list [[declaration* | documentation]] form*))
> == #'(lambda lambda-list [[declaration* | documentation]] form*)
つまり、#'(lambda () (foo))と(lambda () (foo))では同じ結果となります。
まず、Common Lispでは、シンボルのValue cellとFunction cellが分かれています。
> funcallとはPerlでいうろとこのデリファレンス(して関数呼び出し)
Value cellをデリファレンスして関数オブジェクトを取得したのちに
関数呼出しということでいいと思います。
(add2 3)の形式で呼び出せないのは、(add2 3)などのfunction formをeval
するときは、先頭(この場合add2)がシンボルのときは、そのfunction cell
をデリファレンスすると決められているからです。
(setf (symbol-function add2) (make-add 2))としてやれば、(add2 3)が
うまくいくでしょう。
■ このスレッドは過去ログ倉庫に格納されています