我编写了这个函数来打印板的状态,但最终,由于没有返回值,该函数打印出 nil!
功能:
(defun show-board (board)
(dotimes (number 8)
(dotimes (number2 8)
(let ((pos (aref board number number2)))
(cond
((equal pos 0) (format t "~a " "B"))
((equal pos 1) (format t "~a " "P"))
(t (format t "~a " "L")))))
(format t "~%")))
棋盘是一个 8x8 的数组!
命令行上的函数调用输出:
B P B P B P B P
P B P B P B P B
B P B P B P B P
P B P B P B P B
B P B P B P B P
P B P B P B P B
B P B P B P B P
P B P B P B P B
NIL
如何摆脱 NIL?
最佳答案
您可以摆脱代码中的多种格式:
通常在函数式语言中我会返回一个值。退回主板本身是有意义的。由于这样的函数通常是从游戏逻辑中调用的,因此返回值可能有用,并且对输出并不重要。
(defun show-board (board)
(dotimes (i 8)
(dotimes (j 8)
(write-string (case (aref board i j)
(0 "B ")
(1 "P ")
(otherwise "L "))))
(terpri))
board)
关于arrays - 如何避免最后打印nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17429729/