Я хочу написать такой код на Лиспе
(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:quickload-able. - person miercoledi   schedule 10.10.2014