2013-08-05 45 views

Trả lời

23
(map nil #'princ "bacon") 

hoặc

(loop for c across "bacon" do (princ c)) 
3

Looping qua một chuỗi có thể được thực hiện bằng loop như vậy:

(let ((string "bacon")) 

    (loop for idex from 0 to (- (length string)) 1) 
     do 
     (princ (string (aref string idex))))) 

;=> bacon 
;=> NIL 

Để nhặt những nhân vật trong string như một danh sách sử dụng collect trong vòng lặp thay vì do như sau:

(let ((string "bacon")) 

    (loop for idex from 0 to (- (length string)) 1) 
     collect 
     (princ (string (aref string idex))))) 

;=> bacon 
;=> ("b" "a" "c" "o" "n") 
+0

bạn cũng có thể sử dụng 'print' thay vì' princ' –

+11

Bạn don 't cần phải trừ đi 1 từ chiều dài. Sử dụng 'BELOW'. Bạn thực sự không cần một chỉ mục trong LOOP để lặp qua một chuỗi. Sử dụng 'ACROSS'. Cũng chuyển đổi một ký tự thành một chuỗi không có ý nghĩa. 'PRINC' có thể in các ký tự. Vì vậy, 'STRING' là một sự lãng phí. Bạn cũng có thể sử dụng 'WRITE-CHAR', mức này hơi thấp hơn một chút. '(" b "" a "" c "" o "" n ")' cũng không phải là một danh sách các ký tự. Đó là danh sách các chuỗi. –

+0

@RainerJoswig Tôi không nghĩ rằng tôi từng nói rằng nó đã trả về một danh sách * ký tự * - Tôi đã nói rằng nó thu thập các ký tự trong một danh sách *, nhưng điều đó không nhất thiết có nghĩa là nó lưu trữ chúng * * nhân vật. Tôi chỉ có nghĩa là họ đã được xử lý riêng lẻ. –

Các vấn đề liên quan