Posted 2020-09-12 20:14:02 GMT
ボディ部にドキュメンテーション文字列しかない場合について、というのは具体的には、
(lambda (x) "λ[[x]]")(defun foo (x)
"λ[[x]]")
のような場合ですが、上記のように書いてしまうと、ドキュメンテーション文字列ではなくて、返り値(フォームの最後の値)となってしまいます。
(mapcar (lambda (x) "λ[[x]]")
'(0 1 2 3))
→ ("λ[[x]]" "λ[[x]]" "λ[[x]]" "λ[[x]]")
(documentation 'foo 'function)
→ NIL
この場合、二通りの解決策があり、返り値として、nil
を明示的に書く、空のdeclare
を書くことで回避可能です。
(defun foo (x)
"λ[[x]]"
(declare))
(mapcar #'foo
'(0 1 2 3))
→ (NIL NIL NIL NIL)
空のボディを生成してしまうのが悪いのでは?という話もありますが、マクロ等でコード生成した場合に意図せず生成されてしまうことは結構あります。
この場合、(declare)
を入れておく方が、明示的にnil
という値を入れるより生成するコードが簡単になるかなと思います。
以上、非常にニッチな話でした。
■
HTML generated by 3bmd in LispWorks Personal Edition 7.1.2