Scheme 在方案(Fluent)中用变量或循环替换数字不';行不通

Scheme 在方案(Fluent)中用变量或循环替换数字不';行不通,scheme,simulation,fluid-dynamics,Scheme,Simulation,Fluid Dynamics,我正在使用ANSYS Fluent程序进行CFD模拟。这个程序允许使用所谓的日志文件部分自动化模拟设置,我刚刚知道这个日志文件是用Scheme编写的。不幸的是,我甚至从未听说过Scheme,我只知道它是一种Lisp方言(我对它也一无所知) 我正试图通过使用一个循环来自动设置一组模拟参数,从而自动化一些枯燥的任务。如果我从Fluent的命令界面运行此命令: (cx gui执行cx设置列表选择“边界条件*表1*列表2(区域)”(4)) 它执行预期的操作(从列表中选择项目4)。但是,如果我将其放入一

我正在使用ANSYS Fluent程序进行CFD模拟。这个程序允许使用所谓的日志文件部分自动化模拟设置,我刚刚知道这个日志文件是用Scheme编写的。不幸的是,我甚至从未听说过Scheme,我只知道它是一种Lisp方言(我对它也一无所知)

我正试图通过使用一个循环来自动设置一组模拟参数,从而自动化一些枯燥的任务。如果我从Fluent的命令界面运行此命令:

(cx gui执行cx设置列表选择“边界条件*表1*列表2(区域)”(4))
它执行预期的操作(从列表中选择项目4)。但是,如果我将其放入一个循环中:

(do((z4(+z1))((>z27))
(cx gui do cx集合列表选择“边界条件*表1*表2(区域)”(z))
)
什么也不发生,程序在命令窗口中打印一个
#f
。那么,如果我这样做:

(定义z 4)
(cx gui do cx集合列表选择“边界条件*表1*表2(区域)”(z))
什么也没发生


为什么用变量替换数字
4
不起作用?为什么循环返回一个
#f

我认为这里的问题来自
'(z)
部分。此勾号
称为quote,是
(quote…
调用的缩写。它不创建列表,而是用于返回未经评估的内容。在您的情况下,如果您通过
(4)
而不是
”(4)
,您将得到一个错误,因为Scheme将尝试对其求值,并且没有名为
4
的函数。在第一个示例中,当您传递一些静态数据(变量或列表)时,可以使用quote。但是当您使用
'(z)
时,此列表将按原样传递给
cx gui do
,变量
z
不会在此处被替换,它将保留为符号
z

这听起来可能有点含糊不清,所以要简短一点——当您动态创建列表时,您必须使用
list
函数。这应该起作用:

(do((z4(+1z)))
((>z 27))
(cx gui do cx集合列表选择“边界条件*表1*表2(区域)”(列表z)))

编辑:
#f
您在使用
do
时看到的循环是一个返回值。每次您在Schemes REPL/prompt/Command界面中计算某个内容时,都会打印返回值(即如果您尝试
(+120)
,您应该得到
21
printed)。对于
do
循环,必须提供返回表达式。如果不是,则未指定
做什么
循环将返回什么(因此在某些实现中,它可能是
#f
意思是
,在其他
()
也称为零)。那里没有发生任何错误:)

这行“(>z27))”应该做什么?你是指
(当(>z 27)(cx gui执行…
-条件执行)吗?@rsm我从internet上的某个示例中复制了该行。该行应该是循环的停止条件(从z=4开始循环,当z>27时停止)。如果我按照您的建议在
时添加
,程序将引发错误
错误:eval:未绑定变量错误对象:when
噢,对不起。我认为这是
do
主体的一部分,因为缩进;)@rsm没有问题。如果我无意中破坏了缩进,请检查我的答案。如果它解决了你的问题,请接受它,将你的问题标记为已解决,如果你喜欢它,请投票。如果您的问题仍然存在,请告诉我。Fluent似乎没有
+1
功能,因此我恢复到
+1
。除此之外,循环工作得很好!谢谢(另一件事不起作用,但这是另一个问题。)此外,我的用户配置文件似乎还没有投票支持你的答案的
+1
功能:(如果你可以/想看一看,我会通知你:。再次感谢:-)@Drunkenwhaler我更新了我的答案来解释你得到的
\f
。不幸的是,我不懂流利,你们的第二个问题看起来像是与流利相关的问题。至少方案代码看起来还可以。感谢您对
#f
的解释;现在有道理了!我猜这可能与图形界面的时间或其他什么有关,如果这只是一个流利的问题,我也不会感到惊讶。。。使用命令点击图形界面按钮对我来说真的很愚蠢。。。无论如何,谢谢你的帮助!(只是一个小小的更正:幸运的是你不懂流利;-)