このコードを考慮すると:
(defclass test () ((test :initform nil :accessor test)))
#<STANDARD-CLASS TEST>
(defvar *test* (make-instance 'test))
*TEST*
そしてこのテスト:
(funcall #'test *test*)
nil
これが機能すると予想されます:
(setf (funcall #'test *test*) 123)
と同じ
(setf (test *test*) 123)
123
しかし、次のようになります。
; in: LAMBDA NIL
; (FUNCALL #'(SETF FUNCALL) #:NEW1175 #:TMP1177 #:TMP1176)
; ==>
; (SB-C::%FUNCALL #'(SETF FUNCALL) #:NEW1175 #:TMP1177 #:TMP1176)
;
; caught WARNING:
; The function (SETF FUNCALL) is undefined, and its name is reserved by ANSI CL
; so that even if it were defined later, the code doing so would not be portable.
;
; compilation unit finished
; Undefined function:
; (SETF FUNCALL)
; caught 1 WARNING condition
なぜ機能しないのですか?どうすれば回避できますか?
SBCL と CLISP のいずれかを使用してテストしましたが、結果は同じでした。