2012-04-29 4 views
3

알파벳으로 된 글자를 반복해서 쓰는 프로그램을 작성하고 싶습니다. 나는이 C 코드와 대략 동일하게하고 싶다.라켓에있는 알파벳 글자를 반복하십시오.

for(char letter = 'a'; letter <= 'z'; letter++) 
{ 
    printf("The letter is %c\n", letter); 
} 

나는 Racket에서 이것을 어떻게하는지 모른다. 당신의 도움을 주셔서 감사합니다.

(define alphabet (string->list "abcdefghijklmnopqrstuvwxyz")) 

(for ([letter alphabet]) 
    (displayln letter)) 

당신은 비록 for 루프가 훨씬 더 많은 일을 할 수 있습니다 만 소문자 영어 알파벳 글자를 반복하려는 가정

답변

9

, 여기 한 가지 방법이 있습니다. 예를 들어,

(for/list ([let alphabet] [r-let (reverse alphabet)]) 
    (list let r-let)) 

은 다른 방향으로가는 문자와 쌍을 이루는 문자 목록을 생성합니다. 실제로지도로 표현하면 더 좋지만 ((map list alphabet (reverse alphabet)))

또한 SRFI-14은 더 많은 문자가 필요할 경우 더 많은 작업을 제공합니다.

편집 : 원래는 char->integer, integer->charrange으로 작업을 수행했지만 지금은 더 간단합니다.

+1

그래서 기본적으로 전체 알파벳을 명시 적으로 정의하지 않아도 할 수있는 방법이 없다는 말입니까? – Daniel

+1

라켓은 C++이 아니므로 문자 대 정수에 대해 아무런 징벌을하지 않습니다. 정말로 원한다면'(char-> integer # \ a)'에서 시작하여'(char-> integer # \ z) '로 끝나는 루프를 작성할 수는 있지만 그 방법을 프로그래밍 할 좋은 이유는 없습니다 라켓. C++에서 다른 문자 세트를 반복하고 싶다면 이와 비슷한 것을해야 할 것입니다. –

+0

알 수 있습니다. 고마워요! – Daniel

7

그냥 대답 중 하나가 문자 그대로 번역 접근 방식을 보여줍니다 너무 : C에서와 달리 라켓 값의 유형은 고유이다

#lang racket 
(for ([letter (in-range (char->integer #\a) 
         (add1 (char->integer #\z)))]) 
    (printf "The letter is ~a\n" (integer->char letter))) 

라켓은 C 허용 문자와 정수 사이의 암시 적 말장난을 지원하지 않습니다 가치 그 자체보다는 외부 적이다. char->integerinteger->char 함수는 이러한 형식 간의 명시적인 변환을 수행합니다.

관련 문제