2009-06-02 3 views
2

편지가있는 모든 단어를 추출하고 싶습니다. 예.스킴에서 기호의 첫 번째 문자를 추출하려면 어떻게합니까?

(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

답변

4

당신은 명시 적으로 문자열로 변환해야합니다 :

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

(나는 first 문자열에 작동하는지 내 머리 위로 떨어져 잘 모르겠어요 당신은에 string->list를 사용할 수 있습니다. 목록으로 변환 한 다음 first을 가져 가야합니다.)

EDIT : 처음에는 기호 대신 문자열을 쉽게 전달할 수 있습니다. 문자열을 지정하려면 큰 따옴표 (예 : (ewords '("i" "e" "ee" "o" "oo")))를 사용하십시오. .) 나는 돈을 내지 않는다. 이것이 당신의 의도인지는 모르겠지만, 배우고있는 이래로 나는 그 차이점을 언급해야한다고 생각했습니다.

+0

흠 문자열을 사용하여 좋은 소리지만 정말 기호를 사용하고 싶었어요. 어쨌든 고마워. – unj2

+1

예, string-> list가 필요합니다. –

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))))