2009-06-12 2 views
8

에서 자바 -루프 내가 좋아하는 PLT-체계에서 루프를 구현할 수있는 방법은 PLT 계획

for(int i=0;i<10;){ 
    for(int j=0;j<3;){ 
      System.out.println(""+j); 
      j++; 
    } 
     System.out.println(""+i); 
     i++; 
} 
에서
+1

덕분에 musicfreak, 나는 그것을 배우고있다. 그것이 내가 왜이 질문을했는지에 대한 것입니다 :) 스킴 문서는 분명하지 않습니다. 그러나 나는 곧 그것에 익숙해 질 것이라고 생각한다. – fireball003

+0

좋아요, 이것이 "나에게 숙제를해라"는 것 중 하나가 아닌지 확인하는 것. :) 나는 계획을 모르지만 행운을 빌어 요! –

+2

숙제 문제라면 "구문 문제"보다는 "문제"가 보일 것입니다. – fireball003

답변

14
자바에서 귀하의 예를 직접가 때로 믿을 수로 몇 가지 새로운 키워드를 학습하여 Scheme 언어에 매핑되지 않습니다

Scheme에서 for 루프를 구현하기위한 명시적인 구조체 (구조체를 직접 작성하지 않는 한!). Scheme에서 이것을 수행하는 요리 책 방법은 목록을 반복하는 재귀 함수를 정의하는 것입니다. 이 페이지에서 촬영

(define (doit x x-max dx) 
    (if (<= x x-max) 
    (begin 
     ;;...perform loop body with x... 
     (doit (+ x dx) x-max dx)))) 

(doit a b dx) ; execute loop from a to b in steps of dx 

: 여기

Guile and Scheme Links

당신이 필요로하는 아이디어를 설명하는 페이지에 다른 링크가있어 여기에 계획에 대한 루프 스타일의 기능을 수행하는 방법의 예 계획에 명령형 언어에서 루프를 번역하는 이해 :

Scheme Looping Constructs

계획이있다 정말 재미있는 언어를 배우려면 Structure and Interpretation of Computer Programs을 읽어야합니다. 이전에는 MIT에서 Scheme을 가르치는 데 사용 된 교과서였습니다.

+0

고마워요. 이것은 큰 도움이됩니다. :) – fireball003

+0

아무런 문제가 없으므로 대학에서의 저의 긍정적 인 경험에 대해 생각하게합니다. Scheme과 같은 기능적 언어를 배우면 더 나은 프로그래머가 될 수 있습니다. 문제에 대한 우아한 해결책을 생각하는 데 도움이됩니다. Scheme이 이해하기 시작했다면 Prolog와 같은 다른 "다른"언어를 확인하는 것이 좋습니다. 이는 Scheme과 Java와는 다르며 새로운 새로운 것을 가르쳐 줄 수 있습니다. 행운을 비네. :) –

8

Scheme의 반복 구문은 "do"이며 R5RS specification에서 찾을 수 있습니다.

이 같은 것을 보일 것이다 준 예 :

(do ((i 0 (+ i 1))) ((> i 9)) 
    (do ((j 0 (+ j 1))) ((> j 2)) 
    (display j) 
    (newline)) 
    (display i) 
    (newline)) 

(do ...)이 예에 표시하는 것보다 좀 더 일반적이다. 예를 들어 부작용으로 값을 사용하는 대신 값을 반환 할 수 있습니다. 많은 "카운터"가 할 수도 있습니다 :이 작업을 수행 할 수 PLT에서

(do ((i 0 (+ i 1) 
    (j 0 (+ j 2)) 
    ((stop? i j) <return-value>) 
    exprs...) 
+1

이 명확해야합니다. 두 개의 루프 변수가있는 두 번째 예제는 모든 변수가 동시에 반복된다는 것을 지적하지 않으면 까다로울 것입니다. 하나는 'do'= one 루프입니다. 이 예제는 C 루프와 밀접한 관련이있다 "for (i = 0, j = 0;정지 (i, j); – Aaron

+0

예, 사실입니다. 나중에 해당 게시물을 편집하고 내용을 정리하려고합니다. (예 : i = 1, j = j + 2) {exprs();} return return value; 약간. – Jonas

13

:

(for ([i (in-range 10)]) 
    (for ([j (in-range 3)]) (printf "~s\n" j)) 
    (printf "~s\n" i)) 
관련 문제