2

我希望它提取所有包含字母 e 的单词。例如。

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

Berkeley 的 61a 讲座使用 (first 'word) 来提取单词的第一个字符。然而,当我尝试这样做时,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 -> 一个
    (定义 (char->symbol chr)
      (string->symbol (list->string (list chr))))

    ; abc -> (abc)
    (定义(符号->列表符号)
      (映射字符->符号
           (string->list (symbol->string sym))))

您现在可以使用first

    > (first (symbol->list 'word))
    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 回答