2009-06-02 87 views
2

我想要它提取所有在其中有字母e的单词。 例如。如何提取方案中符号的第一个字符?

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

伯克利的61a讲座使用(第一个单词)来提取单词的第一个字符。然而,当我试图这样做时,DrScheme尖叫着我。如何采取单词的第一个字符?像

(first 'word)->'w. 
+1

大学伯克利分校的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

回答

4

你需要将其转换为字符串明确:

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

(我不知道把我的头first是否对字符串进行操作的顶部,你可以使用string->list来。转换到一个列表,然后采取first如果没有)

编辑:这可能是更容易传递字串,而不是摆在首位符号 - 指定字符串,用双引号(如(ewords '("i" "e" "ee" "o" "oo")) )我不喜欢不知道这是否是你的意图,但既然你在学习,我想我应该提到这个区别。

+0

嗯使用字符串听起来不错,但我真的想用符号。不管怎么说,还是要谢谢你。 – unj2 2009-06-02 22:13:11

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 
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)))) 
相关问题