Come eseguire il loop sui caratteri in una stringa di testo in Common-lisp?loop su caratteri in stringa, Common Lisp
Ecco quello che voglio fare, ma in Ruby:
string = "bacon"
string.each_char do |c|
putc c
end
Come eseguire il loop sui caratteri in una stringa di testo in Common-lisp?loop su caratteri in stringa, Common Lisp
Ecco quello che voglio fare, ma in Ruby:
string = "bacon"
string.each_char do |c|
putc c
end
(map nil #'princ "bacon")
o
(loop for c across "bacon" do (princ c))
Looping su una stringa può essere fatto utilizzando loop
in questo modo:
(let ((string "bacon"))
(loop for idex from 0 to (- (length string)) 1)
do
(princ (string (aref string idex)))))
;=> bacon
;=> NIL
di raccogliere i personaggi in string
come lista uso collect
nel ciclo, invece di do
in questo modo:
(let ((string "bacon"))
(loop for idex from 0 to (- (length string)) 1)
collect
(princ (string (aref string idex)))))
;=> bacon
;=> ("b" "a" "c" "o" "n")
si potrebbe anche usare 'print' invece di' princ' –
Non avete bisogno di sottrarre 1 dalla lunghezza. Usa 'BELOW'. In realtà non è necessario un indice in LOOP per iterare su una stringa. Usa 'ACROSS'. Anche la conversione di un carattere in una stringa non ha senso. 'PRINC' può stampare caratteri. Quindi 'STRING' è uno spreco. Puoi anche usare 'WRITE-CHAR', che è leggermente più a basso livello. '(" b "" a "" c "" o "" n ")' non è anche un elenco di caratteri. È una lista di stringhe. –
@RainerJoswig Non penso di aver mai detto che ha restituito un elenco di * caratteri * - Ho detto che raccoglieva i caratteri in un * elenco *, ma questo non significa necessariamente che li ha memorizzati * come * personaggi. Volevo solo dire che sono stati elaborati individualmente. –