2009-06-02 56 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)))) 
相關問題