scheme - 将字符串转换为不带#\ charachters和空格的列表

时间:2017-10-31 06:00:35

标签: string split scheme

如果我在执行某些操作后有一个跟随字符串 - "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

2 个答案:

答案 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")