문제

문자 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")).) 이것이 당신의 의도인지는 모르겠지만, 당신이 배우기 때문에, 나는 구별을 언급해야한다고 생각했습니다.

다른 팁

기호는 주로 원자 값, 즉 일반적으로 분리되고 검사되지 않습니다. 정말로 그렇게하고 싶다면 먼저 유형 변환을 수행해야합니다.

    ; #\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))))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top