我有以下棋盘代表一个4连胜的游戏。
(defun board1 ()
'((NIL NIL NIL NIL)
(NIL NIL NIL NIL)
(NIL NIL NIL NIL)
(NIL NIL NIL NIL)))
有没有办法将程序内的程序转换为下面的主板?假设board1中的一个NIL与board2中的(NIL NIL NIL NIL)相同。
(defun board2 ()
'(((NIL NIL NIL NIL)(NIL NIL NIL NIL)(NIL NIL NIL NIL)(NIL NIL NIL NIL))
((NIL NIL NIL NIL)(NIL NIL NIL NIL)(NIL NIL NIL NIL)(NIL NIL NIL NIL))
((NIL NIL NIL NIL)(NIL NIL NIL NIL)(NIL NIL NIL NIL)(NIL NIL NIL NIL))
((NIL NIL NIL NIL)(NIL NIL NIL NIL)(NIL NIL NIL NIL)(NIL NIL NIL NIL)))
如果我可以转换它,通过这种方式,我可以重新使用我已经为board2完成的代码,这允许我在其上放置碎片,并且先调制口径,先进行面包和A *搜索最快的解决方案。
答案 0 :(得分:1)
你应该学习文字。不应修改文字。因此,不要使用quote
制作游戏板。请阅读:http://clhs.lisp.se/Body/s_quote.htm。
如果你想重用board1,你可以
(loop repeat 4 collect (mapcar 'copy-seq (board1)))
但为什么不这样做呢:
(loop repeat 4 collect (loop repeat 4 collect (make-list 4)))