Искам да напиша код на Lisp като този
(defstruct board
(size 7)
(matrix (make-array (list size size))
(red-stones 0)
(black-stones 0))
за да се определи структура, която представлява дъската на играта.
Искам да мога да създам нова дъска с make-board, която ще създаде матрицата в движение с даденото измерение (размер x размер), така че да не се налага да извиквам make-board от друга функция, която прави матрица.
Въпреки това, когато заредя този код в интерпретатора на clisp и се опитам да направя нова платка (с make-board), получавам съобщение за грешка, което ми казва, че „размер“ няма стойност.
Има ли някакъв начин да се използват полетата на структурата в самата дефиниция на структурата?
Или трябва да направя това?
(defstruct board
size
matrix
(red-stones 0)
(black-stones 0))
(defun create-board (size)
(make-board :size size :matrix (make-array (list size size))) )
Наистина не ми харесва да имам едновременно make-board и create-board, защото това може да доведе до програмни грешки.
(defmethod create-board ((type-of thing)))
.. Тоест, различни методи за работа с едно и също клас в зависимост от това какъв вид информация предоставя потребителският формуляр. Ако все пак влезете в тази заешка дупка, предлагам това въведение в CLOS, както и включване на :CL-MOP системата Closer To MOP за метакласове, ql: възможност за бързо зареждане. - person miercoledi   schedule 10.10.2014