使用Gimp在Scheme中嵌套while循环?

时间:2014-07-15 21:36:08

标签: scheme gimp script-fu

我正在编写一个Gimp Script-Fu脚本,并尝试使用嵌套的while循环。 x设置为15y设置为30y循环至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)))

1 个答案:

答案 0 :(得分:1)

y永远不会重置回0。您的代码将y增加到35,然后增加x 20次,但是在x y的每个后续增量仍然设置为{{1} }}

如果您想查看35x的每个值组合,那么您需要更像这样的鳕鱼:

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的函数,该函数接受参数SOx,它们都代表最小值和最大值对:

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))