2013-05-12 17 views
6

Windows Lisesi mayın tarama gemisi yapmaya çalışan Common Lisp'te çalışıyorum. Ortak Lisp'de matris olarak bir liste nasıl yazdırılır

Bir liste (1 1 1 2 2 2 3 3 3) varsa ve matrisin gibi
(1 1 1 
2 2 2 
3 3 3) 

Nasıl bunu yapması yazdırmak istediğiniz?

Düzenleme

bu gibi

(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

Denediğiniz koddan bazılarını göndermelisiniz. –

cevap

4

başka örnek, eğlence için oldukça-yazıcı kullanarak:

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

Bunun gibi çalışır:

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

başında değilim:

(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

Teşekkür ederim çalışıyor. İlk satır (print-list-as-grid (liste satır kodları) – kosta