2013-03-21 44 views
3

如何將列表轉換爲DrRacket中的字符串?例如,如何將'(紅色黃色藍色綠色)轉換爲「紅色黃色藍色綠色」?我嘗試使用list-> string,但似乎只適用於字符。列表到球拍中的字符串轉換

回答

9

這裏的技巧是將符號列表作爲輸入映射,將每個符號依次轉換爲字符串,注意在除最後一個之外的每個符號之間添加一個空白區域。事情是這樣的:

(define (slist->string slst) 
    (cond ((empty? slst) "") 
     ((empty? (rest slst)) (symbol->string (first slst))) 
     (else (string-append (symbol->string (first slst)) 
          " " 
          (slist->string (rest slst)))))) 

或者更簡單,使用更高階的程序:

(define (slist->string slst) 
    (string-join (map symbol->string slst) " ")) 

無論哪種方式,它按預期工作:

(slist->string '(red yellow blue green)) 
=> "red yellow blue green" 

而只是要徹底,如果輸入列表是(沒有符號的問題)的列表,答案應該是:

(define strlist (list "red" "yellow" "blue" "green")) 
(string-join strlist " ") 
=> "red yellow blue green" 
4

球拍支持多項實用功能,使這個容易。如果您只想查看列表中的內容,您可能會對「顯示」感到滿意。如果你關心沒有parens,你可以使用字符串連接。

#lang racket 

(define my-list '(a big dog)) 

;; the easy way (has parens): 
(~a my-list) 

;; slightly harder 
(string-join (map ~a my-list) " ")