如何提取方案中符号的第一个字符?
问题描述:
我想要它提取所有在其中有字母e的单词。 例如。如何提取方案中符号的第一个字符?
(ewords '(i e ee o oo)) -> '(e ee)
伯克利的61a讲座使用(第一个单词)来提取单词的第一个字符。然而,当我试图这样做时,DrScheme尖叫着我。如何采取单词的第一个字符?像
(first 'word)->'w.
答
你需要将其转换为字符串明确:
(first (symbol->string 'word)) -> "w"
(我不知道把我的头first
是否对字符串进行操作的顶部,你可以使用string->list
来。转换到一个列表,然后采取first
如果没有)
编辑:这可能是更容易传递字串,而不是摆在首位符号 - 指定字符串,用双引号(如(ewords '("i" "e" "ee" "o" "oo"))
)我不喜欢不知道这是否是你的意图,但既然你在学习,我想我应该提到这个区别。
+0
嗯使用字符串听起来不错,但我真的想用符号。不管怎么说,还是要谢谢你。 – unj2 2009-06-02 22:13:11
答
符号主要是指原子值,即它们通常不会被分解和检查。如果你真的想这样做,你必须首先做一些类型转换:
; #\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
答
这要看,什么是一个“字”的数据定义?
它是一个字符序列(又名一个字符串)?这是一个字符列表吗?一串字符串?符号列表?
这是符合您的标准功能,但你可以看到,这是令人费解的,我不知道,如果它是你真正想要的:
; 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))))
大学伯克利分校的61A不使用标准版的计划;他们以Simply Scheme库的形式增加了更多的支持。请参阅:http://planet.plt-scheme.org/package-source/dyoo/simply-scheme.plt/2/1/planet-docs/manual/index.html,它为Racket提供此支持。 – dyoo 2011-08-26 23:40:12