コンストラクタが受け取る引数の形式を変更したい - lisp-cookbook-ja/common-lisp GitHub Wiki

構造体

defstructで作成する構造体のコンストラクタの引数はデフォルトでは、キーワード引数となりますが、:constructorを指定することにより変更することが可能です。

デフォルト

(defstruct foo x y z)

(make-foo :x 1 :y 2 :z 3)
;=>  #S(FOO :X 1 :Y 2 :Z 3)

(make-foo 1 2 3)
;>>> error

必須引数

(defstruct (bar (:constructor make-bar (x y z)))
  x y z)

(make-bar 1 2 3)
;=>  #S(BAR :X 1 :Y 2 :Z 3)

(make-bar)
;>>> error

オプショナル引数

(defstruct (baz (:constructor make-baz (&optional x y z)))
  x y z)

(make-baz 1)
;=>  #S(BAZ :X 1 :Y NIL :Z NIL)

(make-baz)
;=>  #S(BAZ :X NIL :Y NIL :Z NIL)

議論