Làm cách nào để lặp lại các ký tự trong một chuỗi văn bản trong Common-lisp?lặp qua các ký tự trong chuỗi, Common Lisp
Dưới đây là những gì tôi muốn làm, nhưng trong Ruby:
string = "bacon"
string.each_char do |c|
putc c
end
Làm cách nào để lặp lại các ký tự trong một chuỗi văn bản trong Common-lisp?lặp qua các ký tự trong chuỗi, Common Lisp
Dưới đây là những gì tôi muốn làm, nhưng trong Ruby:
string = "bacon"
string.each_char do |c|
putc c
end
(map nil #'princ "bacon")
hoặc
(loop for c across "bacon" do (princ c))
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")
bạn cũng có thể sử dụng 'print' thay vì' princ' –
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. –
@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ẻ. –