Как извлечь первый символ символа в схеме? - PullRequest
2 голосов
/ 03 июня 2009

Я хочу, чтобы он извлек все слова, в которых есть буква е. например.

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

В лекции Беркли 61a (первое слово) используется для извлечения первого символа слова. Однако DrScheme кричит на меня, когда я пытаюсь это сделать. Как взять первый символ слова? как

(first 'word)->'w.

Ответы [ 3 ]

4 голосов
/ 03 июня 2009

Вам необходимо явно преобразовать ее в строку:

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

(Я не уверен, что first работает со строками. Вы можете использовать string->list для преобразования в список и затем взять first, если это не так.)

РЕДАКТИРОВАТЬ: может быть проще обойти строки вместо символов в первую очередь - чтобы обозначить строку, используйте двойные кавычки (например, (ewords '("i" "e" "ee" "o" "oo")).) Я не знаю, если это ваше намерение, но так как вы учитесь, я думал, что я должен упомянуть различие.

1 голос
/ 03 июня 2009

Символы в первую очередь предназначены для атомарных значений, то есть они обычно не разбираются и не анализируются. Если вы действительно хотите это сделать, вы должны сначала выполнить некоторые преобразования типов:

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

    ; abc -> (a b c)
    (define (symbol->list sym)
      (map char->symbol 
           (string->list (symbol->string sym))))

Теперь вы можете использовать first:

    > (first (symbol->list 'word))
    w
0 голосов
/ 11 июня 2009

Зависит от того, каково определение данных для «слова»?

Это последовательность символов (она же строка)? Это список персонажей? Список строк? Список символов?

Вот функция, которая соответствует вашим критериям, но, как вы видите, она запутанная, и мне интересно, действительно ли это то, что вы действительно хотите:

; 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))))
...