文字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))))