我希望它提取所有包含字母 e 的单词。例如。
(ewords '(i e ee o oo)) -> '(e ee)
Berkeley 的 61a 讲座使用 (first 'word) 来提取单词的第一个字符。然而,当我尝试这样做时,DrScheme 对我大喊大叫。如何取单词的第一个字符?喜欢
(first 'word)->'w.
您需要将其显式转换为字符串:
(first (symbol->string 'word)) -> "w"
(我不确定是否first
对字符串进行操作。您可以使用string->list
转换为列表,first
如果没有,则使用。)
编辑:首先传递字符串而不是符号可能更容易 - 指定一个字符串,使用双引号(例如(ewords '("i" "e" "ee" "o" "oo"))
。)我不知道这是否是你的意图,但既然你正在学习,我认为我应该提到区别。
符号主要是指原子值,即它们通常不被拆开和检查。如果你真的想这样做,你必须先做一些类型转换:
; #\a -> 一个 (定义 (char->symbol chr) (string->symbol (list->string (list chr)))) ; abc -> (abc) (定义(符号->列表符号) (映射字符->符号 (string->list (symbol->string sym))))
您现在可以使用first
:
> (first (symbol->list 'word)) 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))))