関数を使用して、commonlispの関数を返そうとしています。しかし、説明したい奇妙な状況に遭遇しました。
これが私がやりたいことです:
(defun makefun(x) ;1
(lambda (z)
(+ x z)))
((makefun 1) 2) ;2
これにより、不正な関数呼び出しが発生します。ただし、以下が有効です。
((lambda (z) (+ 1 z)) 2) ;3
(funcall (makefun 1) 2) ;4
最初の例のようにmakefunを使用できないのはなぜですか?2の呼び出しが評価されるので、3行目と同等になると思います。