6

DrRacketでリストを文字列に変換するにはどうすればよいですか?たとえば、'(赤黄青緑)を「赤黄青緑」に変換するにはどうすればよいですか?list-> stringを使用してみましたが、これは文字に対してのみ機能するようです。

4

2 に答える 2

10

ここでの秘訣は、入力として受け取った記号のリストをマッピングし、各記号を順番に文字列に変換し、最後の記号を除く各記号の間に空白を追加することです。このようなもの:

(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"
于 2013-03-21T14:11:22.220 に答える
5

Racketは、これを簡単にする多くのユーティリティ機能をサポートしています。リストの内容を確認するだけの場合は、「表示」だけで十分かもしれません。親がないことを気にする場合は、string-joinを使用できます。

#lang racket

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

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

;; slightly harder
(string-join (map ~a my-list) " ")
于 2013-03-21T16:02:43.817 に答える