gpt4 book ai didi

lisp - 如何使用定义中的参数在 Lisp 中定义结构

转载 作者:太空宇宙 更新时间:2023-11-03 18:40:30 27 4
gpt4 key购买 nike

我想写一些像这样的 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,因为这可能会导致编程错误。

最佳答案

您可以使用 boa 构造函数:

(defstruct (board
(:constructor make-board (&optional (size 7)
&aux (matrix (make-array (list size size))))))
(size)
(matrix)
(red-stones 0)
(black-stones 0))

defstruct 的 CLHS 文档和 BOA lambda lists .

关于lisp - 如何使用定义中的参数在 Lisp 中定义结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4354681/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com