문제
문자 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))))
제휴하지 않습니다 StackOverflow