如果我在执行某些操作后有一个跟随字符串 - "this is a string"
我想转换回列表 - (this is a string)
使用内置的methong string->list
,我得到(#\t #\h #\i #\s #\space #\i #\s #\space #\a #\space #\s #\t #\r #\i #\n #\g #\?)
。
如何在没有所有#\
符号的情况下将其转换为列表,并且不将空格替换为#\space
?
答案 0 :(得分:1)
你将字符串与符号混淆。要按空格分割字符串,只需执行以下操作:
(string-split "this is a string")
=> '("this" "is" "a" "string") ; a list of strings
但如果您真的想将字符串转换为符号列表,请执行以下操作:
(define (convert string)
(map string->symbol ; convert each substring into a symbol
(string-split string))) ; split the string by its spaces
(convert "this is a string")
=> '(this is a string) ; actually, a list of symbols (not strings!)
答案 1 :(得分:1)
如果您没有string-split
,您仍然可以使用基本的Scheme功能实现它。
(define (tokenize l)
(let loop ((t '())
(l l))
(if (pair? l)
(let ((c (car l)))
(if (char=? c #\space)
(cons (reverse t) (loop '() (cdr l)))
(loop (cons (car l) t) (cdr l))))
(if (null? t)
'()
(list (reverse t))))))
(define (string-split s)
(map list->string (tokenize (string->list s))))
;; (string-split "this is a string") => ("this" "is" "a" "string")