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

Scheme 使用Gimp在方案中嵌套while循环?,scheme,gimp,script-fu,Scheme,Gimp,Script Fu,我正在编写一个Gimp脚本Fu脚本,并尝试使用嵌套的while循环x设置为15,y设置为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)

我正在编写一个Gimp脚本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)))
(while(字符串x)“-(数字->字符串y)))
(集合!y(+y 1)))
(集!x(+x1)))

y
永远不会被重置回
0
。您的代码将递增
y
35
,然后递增
x
20次,但是在以后每次递增
x
y
仍设置为
35

如果您想查看
x
y
的每个值组合,那么您需要更像这样的代码:

(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))
)
在这个函数中,我提取
x
y
(使用
(car x)
(car(cdr x))
的第一个和最后一个值,然后使用
let*创建两个名为
x!
y!
的内部变量,我将更改(以消除调用函数后更改
x
y`的副作用)。如果这样调用此函数:

(SO '(15 20) '(30 35))
您将获得以下输出:

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

我同意@JasonSperske;这不是递归的。你是说嵌套的吗?是的,对不起,我是说嵌套的。事实上,我从你的问题中看到你想从x=15和y=30开始,但我把这些值排除在我的答案之外,因为我认为这会使重置内部循环的更一般的答案复杂化。非常感谢!我怎么会错过这个,啊。好了,我添加了一个更简洁的示例,并使用Gimp中的脚本窗口对其进行了测试:)我真的很喜欢这种语言,而且我在学习它时很开心:)
"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"