gpt4 book ai didi

loops - 方案:如何创建一个循环将数据保存到不同名称的文件中?

转载 作者:行者123 更新时间:2023-12-03 21:41:45 30 4
gpt4 key购买 nike

我正在使用一个使用 Scheme 的程序 (TracePro),但我并没有经常使用它。我想创建一个代码,更改一些初始值,运行模拟,然后将生成的数据表保存到文件中,然后再次更改值,运行模拟,保存数据等 90 次。到目前为止我创建的代码:

(raytrace:set-beam-orientation-euler-degrees (gvector 0 90 -90))
(raytrace:grid)
(edit:select (car (cdr (entity:faces (entity 12)))))
(analysis:incident)
(analysis:incident-save "C:/Users/Admin/Desktop/testdata/incident0.csv" "csv")

有没有一种方法可以创建一个循环,以不同的入射角(从 0 度到 90 度)和不同的文件名(从 incident0.csv 一直到 incident90.csv)运行这段代码,而无需复制代码 90 次,然后手动更改它...?我有点知道如何处理不断变化的入射角,但不知道文件名的变化。

提前致谢。

最佳答案

我不知道 TracePro 的细节,但在任何 Scheme 程序中,您都可以使用递归来循环。首先,我们必须重构代码中发生变化的部分并将其作为参数,将代码封装在一个函数中。我不确定哪个值应该是入射角,请根据需要进行调整:

(define (run-simulation angle)
(raytrace:set-beam-orientation-euler-degrees
(gvector angle 90 -90)) ; assuming that the first parameter is the angle
(raytrace:grid)
(edit:select
(car (cdr (entity:faces (entity 12)))))
(analysis:incident)
(analysis:incident-save
(string-append ; this is how we can dynamically create file names
"C:/Users/Admin/Desktop/testdata/incident"
(number->string angle)
".csv")
"csv"))

有了上面的过程,很容易循环它,根据需要多次调用它。请注意我们如何使用递归的基本情况来停止,以及在递归步骤中我们如何增加当前值:

(define (loop init end)
(cond ((> init end) 'done) ; base case of recursion
(else ; otherwise
(run-simulation init) ; call the previous procedure
(loop (+ init 1) end)))) ; advance recursion

现在我们只需在调用循环时提供适当的开始和停止参数:

(loop 0 90)

如果我们对此很聪明,我们可以将相同的循环过程重用于其他目的,注意唯一可能改变的是被调用的过程 - 所以我们也可以将它作为参数传递!

(define (loop func init end)
(cond ((> init end) 'done)
(else
(func init)
(loop func (+ init 1) end))))

(loop run-simulation 0 90)

您还可以应用其他技巧来使程序更加灵活,但目前,上面的代码应该能让您走上正轨。快乐计划!

关于loops - 方案:如何创建一个循环将数据保存到不同名称的文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25231496/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com