Как мне избежать ноля, напечатанного в конце?

Я кодировал эту функцию, которая распечатывает состояние платы, но в конце концов, из-за того, что нет возврата, функция печатает ноль!

Функция:

(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 "~%")))

Доска - это массив 8х8!

вывод вызова функции в командной строке:

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 ответа

Решение

Добавление (values) как форма возврата для dotimes сделаю это:

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

в конце концов, show-board действительно не возвращает никаких значений, верно?

Вы можете избавиться от нескольких форматов в коде:

Обычно на функциональном языке я бы вернул значение. Имеет смысл вернуть саму доску. Поскольку такая функция обычно вызывается из игровой логики, возвращаемое значение может быть полезным, и тогда оно не имеет значения для вывода.

(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)
Другие вопросы по тегам