我正在编写一个Gimp Script-Fu脚本,并尝试使用嵌套的while循环。 x
设置为15
,y
设置为30
。 y
循环至35
,但x
仍停留在15
,循环退出。这有什么不对?为什么x
的值没有改变?
(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 :(得分:1)
y
永远不会重置回0
。您的代码将y
增加到35
,然后增加x
20次,但是在x
y
的每个后续增量仍然设置为{{1} }}
如果您想查看35
和x
的每个值组合,那么您需要更像这样的鳕鱼:
y
以下是一个更完整的示例,我现在有时间使用Gimp来处理这个问题(我使用的是(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))
)
代替print
,因为我是在控制台中工作,但ti应该可以互换)。首先,我要定义一个名为gimp-message
的函数,该函数接受参数SO
,x
,它们都代表最小值和最大值对:
y
在此功能中,我提取(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))
)
)
)
和x
的第一个和最后一个值(y
和(car x)
,然后我使用(car (cdr x))
x!let* to create two inner variables called
y!and
x that I will be altering the value of (to remove side effects of having
y`在调用函数后发生变化)。如果你这样调用这个函数:
and
您将获得以下输出:
(SO '(15 20) '(30 35))