使用参数Lisp的结构,我想,以定义表示游戏的董事会结构来写一些Lisp代码这样如何定义的定义
(defstruct board
(size 7)
(matrix (make-array (list size size))
(red-stones 0)
(black-stones 0))
。
我希望能够创建一个带有制作板的新电路板,该电路板将随着给定尺寸(大小x尺寸)随时创建矩阵,这样我就不必从另一个调用制作板函数,使矩阵。
但是,当我将该代码加载到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都可用,因为这可能会导致编程错误。
我建议你熟悉一下** CLOS **,它本质上就是Common Lisp的对象/类系统。将_board_定义为一个类,您可以通过`(defmethod create-board((type-of thing)))`指定_methods_。也就是说,用于使用同一个类的各种_methods_依赖于什么类型的用户形式提供的信息。如果你确实下了这个兔子洞,我建议[这个](http://www.aiai.ed.ac.uk/~jeff/clos-guide.html)** CLOS **介绍,以及包含:CL-MOP _Closer对于元类的MOP_系统,ql:quickload-able。 – miercoledi 2014-10-10 03:00:49