我想要它提取所有字母e的单词。 例如。
(ewords '(i e ee o oo)) -> '(e ee)
伯克利的61a讲座使用(第一个'单词)来提取单词的第一个字符。然而当我尝试这样做时,DrScheme对我尖叫。怎么取这个词的第一个字?喜欢
(first 'word)->'w.
答案 0 :(得分:4)
您需要明确地将其转换为字符串:
(first (symbol->string 'word)) -> "w"
(我不确定first
是否对字符串进行操作。您可以使用string->list
转换为列表,然后点击first
“T。)
编辑:首先传递字符串而不是符号可能更容易 - 指定字符串,使用双引号(例如(ewords '("i" "e" "ee" "o" "oo"))
。)我不知道这是否是你的意图,但是既然你在学习,我想我应该提一下这个区别。
答案 1 :(得分:1)
符号主要是指原子值,即它们通常不被拆开和检查。如果你真的想这样做,你必须先做一些类型的转换:
; #\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
答案 2 :(得分: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))))