引数リスト情報の表示を変更したい - lisp-cookbook-ja/common-lisp GitHub Wiki

引数リスト情報の取り出し/設定はANSI CLの仕様では規定されていませんが、処理系によってはサポートしている場合があります。

下記は、何らかの理由によって引数情報が貧弱な場合に設定し直す例です。

(defun arglist (fctn)
  #+sbcl
  (sb-kernel:%simple-fun-arglist (sb-kernel:%fun-fun fctn)))

(defun (setf arglist) (arglist fctn)
  #+sbcl 
  (setf (sb-kernel:%simple-fun-arglist (sb-kernel:%fun-fun fctn))
        arglist))
(defun foo (x y z)
  (list (the string x) (the integer y) (the cons z)))

(arglist #'foo)
;=>  (X Y Z)

(setf (arglist #'foo) '(string integer cons))

(arglist #'foo)
;=>  (STRING INTEGER CONS)

(foo "foo" 8 '(foo))
;=>  ("foo" 8 (FOO))