W jaki sposób pętlę nad znakami w ciągu tekstu w Common-sepl?Pętla nad znakami w łańcuchu, Common Lisp
Oto, co chcę zrobić, ale w Ruby:
string = "bacon"
string.each_char do |c|
putc c
end
W jaki sposób pętlę nad znakami w ciągu tekstu w Common-sepl?Pętla nad znakami w łańcuchu, Common Lisp
Oto, co chcę zrobić, ale w Ruby:
string = "bacon"
string.each_char do |c|
putc c
end
(map nil #'princ "bacon")
lub
(loop for c across "bacon" do (princ c))
zapętlenie nad ciągiem można zrobić za pomocą loop
tak:
(let ((string "bacon"))
(loop for idex from 0 to (- (length string)) 1)
do
(princ (string (aref string idex)))))
;=> bacon
;=> NIL
zebrać znaki w string
jako listę użyj collect
w pętli zamiast do
tak jak:
(let ((string "bacon"))
(loop for idex from 0 to (- (length string)) 1)
collect
(princ (string (aref string idex)))))
;=> bacon
;=> ("b" "a" "c" "o" "n")
można też użyć 'print' zamiast' princ' –
Ty Don't trzeba odjąć 1 od długości. Użyj 'PONIŻEJ'. Rzeczywiście nie potrzebujesz indeksu w LOOP, aby iterować po ciągu znaków w ogóle. Użyj 'ACROSS'. Również konwersja znaku na ciąg nie ma sensu. 'PRINC' może drukować znaki. Tak więc "STRING" jest odpadem. Możesz również użyć 'WRITE-CHAR', która jest nieco bardziej niskiego poziomu. '(" b "" a "" c "" o "" n ")' nie jest także listą znaków. Jest to lista ciągów. –
@RainerJoswig Nie sądzę, żebym kiedykolwiek powiedział, że zwrócił listę * znaków * - Powiedziałem, że zebrał on znaki na * liście *, ale to niekoniecznie oznacza, że zapisał je * jako * postacie. Chciałem tylko, żeby były przetwarzane indywidualnie. –