2013-05-12 17 views
6

私はCommon Lispで作業しており、Windowsのゲーム掃海艇を作ろうとしています。Common Lispのリストとしてリストを印刷するには

私はリスト(1 1 1 2 2 2 3 3 3)を持っており、それを行うにはどのように行列のような

(1 1 1 
2 2 2 
3 3 3) 

ことを印刷したいですか?

編集

私はこのような

(format t "Input width:") 
(setf width (read)) 
(format t "Input height:") 
(setf height (read))  
(format t "How many mines:") 
(setf brMina (read)) 

(defun matrica (i j) 
    (cond ((= 0 i) '()) 
    (t (append (vrsta j) (matrica (1- i) j))))) 


(setf minefield (matrica width height)) 

(defun stampaj() 
     (format t "~%~a" minefield)) 
+0

試したコードの一部を投稿する必要があります。 –

答えて

4

別の例として、楽しみのためのプリティプリンタを使用して:

(defun print-list-as-matrix 
    (list elements-per-row 
    &optional (cell-width (1+ (truncate (log (apply #'max list) 10))))) 
    (let ((*print-right-margin* (* elements-per-row (1+ cell-width))) 
     (*print-miser-width* nil) 
     (*print-pretty* t) 
     (format-string (format nil "~~<[email protected]{~~~ad~~^ ~~}[email protected]:>~%" cell-width))) 
    (format t format-string list))) 

このような作品:

CL-USER> (print-list-as-matrix (loop for i from 1 to 9 collect i) 3) 
1 2 3 
4 5 6 
7 8 9 
NIL 
CL-USER> (print-list-as-matrix (loop for i from 1 to 25 collect i) 5) 
1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 15 
16 17 18 19 20 
21 22 23 24 25 
NIL 
CL-USER> (print-list-as-matrix (loop for i from 1 to 16 collect i) 2) 
1 2 
3 4 
5 6 
7 8 
9 10 
11 12 
13 14 
15 16 
2

の先頭にいます:

(defun print-list-as-grid (list rows cols) 
    (assert (= (length list) (* rows cols)) 
    (loop for row from 0 below rows do 
    (loop for col from 0 below cols do 
     (princ (car list)) 
     (prinC#\space) 
     (setf list (cdr list))) 
    (prinC#\newline))) 

* (print-list-as-grid '(a b c d e f g h i) 3 3) 
A B C 
D E F 
G H I 

NIL 
+1

ありがとうございます。最初の行は、(defun print-list-as-grid(リスト行cols) – kosta

関連する問題