Один из способов:
(defstruct (person
(:constructor make-person (&key real-name
(fake-name real-name))))
real-name
fake-name)
Вы можете существенно адаптировать функцию конструктора к вашим потребностям, включая
- с именем, отличным от
make-xxx
- когда Лисп генерирует конструктор "по порядку аргументов" (BOA) вместо основанного на ключевых словах
Рассмотрим
(defstruct (person
(:constructor make-person (real-name
&optional (fake-name real-name))))
real-name
fake-name)
Вы даже можете инициализировать созданные поля, используя ключевое слово &aux
lambda-list:
(defstruct (person
(:constructor make-person (real-name
&aux (fake-name (format nil
"fake-of-~A"
real-name)))))
real-name
fake-name)