我已经编写了这个函数来打印出电路板的状态,但最后,由于没有返回的事实,函数打印出一个零!
功能:
(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?
答案 0 :(得分:4)
您可以在代码中删除多种格式:
通常在函数式语言中我会返回一个值。返回董事会本身是有道理的。由于这样的函数通常是从游戏逻辑中调用的,因此返回值可能很有用,然后输出无关紧要。
(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)
答案 1 :(得分:1)
添加(values)
作为dotimes
的返回表单将执行此操作:
(dotimes (number 8 (values))
.....)
毕竟,show-board
确实没有返回任何值,对吗?