2

文字eが含まれているすべての単語を抽出してほしい。例えば。

(ewords '(i e ee o oo)) -> '(e ee)

バークレーの61a講義では、(最初​​の'単語)を使用して単語の最初の文字を抽出します。しかし、私がそうしようとすると、DrSchemeは私に悲鳴を上げます。単語の最初の文字をどのように取りますか?お気に入り

(first 'word)->'w.
4

3 に答える 3

4

明示的に文字列に変換する必要があります。

(first (symbol->string 'word)) -> "w"

first(文字列で動作するかどうかは頭のてっぺんからわかりません。string->listリストに変換して、firstそうでない場合は取得するために使用できます。)

編集:そもそも記号の代わりに文字列を渡す方が簡単かもしれません-文字列を指定するには、二重引用符を使用します(例(ewords '("i" "e" "ee" "o" "oo")))これがあなたの意図であるかどうかはわかりませんが、あなたが学んでいるので、私は私はその違いに言及すべきだと思いました。

于 2009-06-02T21:51:32.013 に答える
1

シンボルは、主にアトミック値を意味します。つまり、通常、シンボルは分解されて調べられません。本当にやりたいのなら、最初にいくつかの型変換をしなければなりません:

    ; #\ a-> a
    (定義(char-> symbol chr)
      (string-> symbol(list-> string(list chr))))

    ; abc->(abc)
    (define(symbol-> list sym)
      (マップ文字->シンボル
           (string-> list(symbol-> string sym))))

これで使用できますfirst

    >(最初の(記号->リスト'単語))
    w
于 2009-06-03T04:09:41.333 に答える
0

「単語」のデータ定義は何ですか?

それは文字のシーケンス(別名文字列)ですか?キャラクターのリストですか?文字列のリスト?記号のリスト?

これがあなたの基準を満たす関数ですが、あなたが見ることができるように、それは複雑であり、それがあなたが本当に望むものであるかどうか疑問に思います:

; 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))))
于 2009-06-11T19:16:53.050 に答える