我怎么能避免最后打印的零?

时间:2013-07-02 15:34:33

标签: arrays format lisp null read-eval-print-loop

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

功能:

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

2 个答案:

答案 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确实没有返回任何值,对吗?