文字eが含まれているすべての単語を抽出してほしい。例えば。
(ewords '(i e ee o oo)) -> '(e ee)
バークレーの61a講義では、(最初の'単語)を使用して単語の最初の文字を抽出します。しかし、私がそうしようとすると、DrSchemeは私に悲鳴を上げます。単語の最初の文字をどのように取りますか?お気に入り
(first 'word)->'w.
明示的に文字列に変換する必要があります。
(first (symbol->string 'word)) -> "w"
first
(文字列で動作するかどうかは頭のてっぺんからわかりません。string->list
リストに変換して、first
そうでない場合は取得するために使用できます。)
編集:そもそも記号の代わりに文字列を渡す方が簡単かもしれません-文字列を指定するには、二重引用符を使用します(例(ewords '("i" "e" "ee" "o" "oo"))
)これがあなたの意図であるかどうかはわかりませんが、あなたが学んでいるので、私は私はその違いに言及すべきだと思いました。
シンボルは、主にアトミック値を意味します。つまり、通常、シンボルは分解されて調べられません。本当にやりたいのなら、最初にいくつかの型変換をしなければなりません:
; #\ a-> a (定義(char-> symbol chr) (string-> symbol(list-> string(list chr)))) ; abc->(abc) (define(symbol-> list sym) (マップ文字->シンボル (string-> list(symbol-> string sym))))
これで使用できますfirst
:
>(最初の(記号->リスト'単語)) w
「単語」のデータ定義は何ですか?
それは文字のシーケンス(別名文字列)ですか?キャラクターのリストですか?文字列のリスト?記号のリスト?
これがあなたの基準を満たす関数ですが、あなたが見ることができるように、それは複雑であり、それがあなたが本当に望むものであるかどうか疑問に思います:
; symbol->list-of-symbols : symbol -> (ListOf symbol)
; To destructure a symbol into a list of its constituent parts
(define (symbol->list-of-symbols sym)
(map (lambda (s) (string->symbol (string s)))
(string->list (symbol->string sym))))