2

我已经编写了这个打印出板子状态的函数,但最后,由于没有返回这个函数打印一个零!

功能:

(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?

4

2 回答 2

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)
于 2013-07-02T17:09:15.740 回答
1

添加(values)为返回表单dotimes即可:

(dotimes (number 8 (values))
   .....)

毕竟,show-board确实不返回任何值,对吧?

于 2013-07-02T16:08:49.160 回答