Как мне избежать ноля, напечатанного в конце?
Я кодировал эту функцию, которая распечатывает состояние платы, но в конце концов, из-за того, что нет возврата, функция печатает ноль!
Функция:
(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)