Процедура формата Lisp, применяемая к массивам - PullRequest
4 голосов
/ 05 декабря 2010

Мне нужна помощь с функцией format и массивами.

Моя цель состоит в том, чтобы напечатать двумерный массив N & middot; N целых значений в виде N целых чисел на строку. Например:

#2A((1 2 3)
    (4 5 6)
    (7 8 9))

должно быть напечатано как

1 2 3 
4 5 6
7 8 9

Я не смог найти никакой документации о том, как использовать format для печати массивов. Может ли это быть на самом деле, или я должен преобразовать свой массив в список и использовать что-то вроде:

(format t "~{~%~{~A~^ ~}~}"  list)

Ответы [ 2 ]

4 голосов
/ 21 декабря 2010
(defun show-board (board)
  (loop for i below (car (array-dimensions board)) do
        (loop for j below (cadr (array-dimensions board)) do
          (let ((cell (aref board i j)))
            (format t "~a " cell)))
        (format t "~%")))
4 голосов
/ 05 декабря 2010

Если я не ошибаюсь, у format нет прямого пути "войти" в массив.Вы можете написать свою собственную функцию, которую будет использовать tilde-slash (~/function/, см. CLHS ), или вы можете привести массив в список и использовать предложенные вами директивы или ~/pprint-tabular/.Если вы хотите определить свой собственный, в CLHS есть пример кода для pprint-tabular, который вы можете изменить для массивов.

...