Lisp thông thường hỗ trợ rất nhiều chỉ thị định dạng. Tuy nhiên, tôi không thể tìm thấy một chỉ thị hữu ích cho vấn đề của tôi. Về cơ bản, tôi muốn in một mạng lưới các số.Có định dạng chỉ thị nào để lặp qua vectơ trong Common Lisp không?
Sử dụng một danh sách các công việc sau độc đáo:
(format t "~{~A|~A|~A~%~^-----~%~}" '(1 2 3 4 5 6 7 8 9))
1|2|3
-----
4|5|6
-----
7|8|9
NIL
tôi đã không thể tìm thấy một cấu trúc tương tự để lặp qua vectơ. CLtL2 states clearly that~{...~}
hy vọng danh sách là đối số. Tôi đã thử bằng cách sử dụng một vector anyway, nhưng Clisp của tôi đúng kêu lên về loại đối số sai. Để giải quyết sự cố, tôi chuyển đổi vectơ của mình thành danh sách ném đi bằng cách sử dụng toàn bộ loop
.
(let ((lst (loop for e across '#(1 2 3 4 5 6 7 8 9) collecting e)))
(format t "~{~A|~A|~A~%~^-----~%~}" lst))
1|2|3
-----
4|5|6
-----
7|8|9
NIL
Công trình này, nhưng nó đánh tôi như một giải pháp tạm thời vụng về. Tôi không muốn tạo nhiều danh sách tạm thời chỉ cho format
. Có cách nào để lặp lại vectơ trực tiếp không?
Hết sức tò mò, có lý do nào không vì lý do tại sao format
không hỗ trợ trình tự?
Bạn luôn có thể tự thêm bằng '(định dạng t" ~/func-name/"cái gì đó)' –