2014-07-15 8 views
0

저는 Gimp Script-Fu 스크립트를 작성 중이며 중첩 된 while 루프를 사용하려고합니다. x15으로 설정되고 y30으로 설정됩니다. y 루프는 35까지이며, x15에 있으며 루프가 종료됩니다. 여기서 뭐가 잘못 됐니? x의 값이 변경되지 않는 이유는 무엇입니까?Gimp가 포함 된 Scheme의 중첩 된 while 루프?

(while (< x 20) 
    (while (< y 35)  
    (gimp-message (string-append (number->string x) "-" (number->string y))) 
    (set! y (+ y 1))) 
    (set! x (+ x 1))) 
+0

을; 이것은 재귀가 아닙니다. 중첩 된 것을 의미합니까? –

+0

네, 미안 해요. – noway

답변

1

y0 다시 리셋되는되지 않습니다. y까지 코드가 35으로 증가하고 x이 20 번 증가하지만, 이후의 각 증가마다 xy은 여전히 ​​35으로 설정됩니다. 당신은 당신이 더 같은 대구를 필요 xy 값의 각 조합을 통해 가고 싶어하면

:

(while (< x 20) 
    (set! y 0) 
    (while (< y 35)  
      (gimp-message (string-append (number->string x) "-" (number->string y))) 
      (set! y (+ y 1)) 
      ) 
    (set! x (+ x 1)) 
) 
다음

보다 완전한 예는 지금은 비록 일을하는 시간을 가졌다이다 이 질문은 Gimp (콘솔에서 작업 중이기 때문에 gimp-message 대신 print을 사용하고 있지만 ti는 상호 교환 가능해야 함). 내가 x의 처음과 마지막 값을 잡아 당겨있어이 기능을 내부

(define (SO x y) 
    (let* ((x! (car x)) (y! (car y))) 
    (while (< x! (car (cdr x))) 
     (set! y! (car y)) 
     (while (< y! (car (cdr y))) 
     (print (string-append (number->string x!) "-" (number->string y!))) 
     (set! y! (+ y! 1)) 
    ) 
     (set! x! (+ x! 1)) 
    ) 
) 
) 

: 나는 모두 분의 쌍과 최대 값을 나타냅니다 인수를 받아 SO라는 기능 x, y을 정의하고 있습니다 시작하려면 및 y ((car x)(car (cdr x))을 사용하면 함수가 호출 된 후 let* to create two inner variables called x! and y! that I will be altering the value of (to remove side effects of having x and y`이 사용됩니다). 다음과 같은 출력을 얻을

(SO '(15 20) '(30 35)) 

: 당신과 같이이 함수를 호출하면 내가 @JasonSperske에 동의

"15-30" 
"15-31" 
"15-32" 
"15-33" 
"15-34" 
"16-30" 
"16-31" 
"16-32" 
"16-33" 
"16-34" 
"17-30" 
"17-31" 
"17-32" 
"17-33" 
"17-34" 
"18-30" 
"18-31" 
"18-32" 
"18-33" 
"18-34" 
"19-30" 
"19-31" 
"19-32" 
"19-33" 
"19-34" 
+0

사실 나는 x = 15와 y = 30으로 시작하고 싶었지만, 내적 루프를 재설정하는 좀 더 일반적인 대답을 복잡하게 만들었다 고 생각하기 때문에이 값을 내 대답에서 지켜 보았습니다. –

+0

대단히 고마워요! 나는 그것을 어떻게 그리웠 는가? – noway

+0

저기, 깨끗한 예제를 추가하고 김프의 Script-fu 창으로 테스트했습니다 :) 저는이 언어를 정말 좋아하고 많은 재미를 배우고 있습니다 :) –