如何在Scheme语言中增加do循环中的计数器?
我想在Scheme语言的do循环中执行一个简单的计数器递增,但我对该语言不太熟悉,并且尝试了许多脚本,但都没有成功。代码将在Ansys Fluent中实现,以读取多个案例文件:如何在Scheme语言中增加do循环中的计数器?,scheme,global-variables,counter,do-loops,Scheme,Global Variables,Counter,Do Loops,我想在Scheme语言的do循环中执行一个简单的计数器递增,但我对该语言不太熟悉,并且尝试了许多脚本,但都没有成功。代码将在Ansys Fluent中实现,以读取多个案例文件: (define j 5) (Do ((i 10 (+ i 1))) ((>= i 20)) (ti-menu-load-string (format #f "/file/read-case \"C:/DataProcessing/Case~a-time~a-sec/test/Case~a-time~a-sec.ca
(define j 5)
(Do ((i 10 (+ i 1))) ((>= i 20))
(ti-menu-load-string (format #f "/file/read-case \"C:/DataProcessing/Case~a-time~a-sec/test/Case~a-time~a-sec.cas\"" i j i j))
(set! j (+ j 1))
)
如何将新的j
值传递给do循环,以便我按照如下方式更改文件夹和文件名:
Case10-time5-sec
Case11-time6-sec
...
我知道
(set!j(+j1))
不是做事情的正确方法,而是让你了解我在做什么。我认为在变量改变值时调用它并不困难?在变量列表中,您只需添加另一个术语:
(do ((i 10 (+ i 1))
(j 5 (+ j 1)))
((>= i 20) 'my-return-value)
(ti-menu-load-string
(format #f "/file/read-case \"C:/DataProcessing/Case~a-time~a-sec/test/Case~a-time~a-sec.cas\"" i j i j)))
; ==> my-return-value (and as side effect prints some strings)
要知道,do
只是递归函数的语法糖。您可以使用名为的let:
(let function-name ((i 10) (j 5))
(if (>= i 20)
'my-return-value
(begin
(ti-menu-load-string
(format #f "/file/read-case \"C:/DataProcessing/Case~a-time~a-sec/test/Case~a-time~a-sec.cas\"" i j i j))
(function-name (+ i 1) (+ j 1)))))
实际上,您可以通过将生产和打印分开来实现它的功能:
(define (make-strings)
(let function-name ((i 10) (j 5) (result '()))
(if (>= i 20)
(reverse result)
(function-name
(+ i 1)
(+ j 1)
(cons (format #f "/file/read-case \"C:/DataProcessing/Case~a-time~a-sec/test/Case~a-time~a-sec.cas\"" i j i j)
result)))))
(for-each ti-menu-load-string (make-strings))
很好的一点是,您可以进行单元测试
生成字符串
,扩展它以获取输入变量等 在变量列表中,您只需添加另一个术语:
(do ((i 10 (+ i 1))
(j 5 (+ j 1)))
((>= i 20) 'my-return-value)
(ti-menu-load-string
(format #f "/file/read-case \"C:/DataProcessing/Case~a-time~a-sec/test/Case~a-time~a-sec.cas\"" i j i j)))
; ==> my-return-value (and as side effect prints some strings)
要知道,do
只是递归函数的语法糖。您可以使用名为的let:
(let function-name ((i 10) (j 5))
(if (>= i 20)
'my-return-value
(begin
(ti-menu-load-string
(format #f "/file/read-case \"C:/DataProcessing/Case~a-time~a-sec/test/Case~a-time~a-sec.cas\"" i j i j))
(function-name (+ i 1) (+ j 1)))))
实际上,您可以通过将生产和打印分开来实现它的功能:
(define (make-strings)
(let function-name ((i 10) (j 5) (result '()))
(if (>= i 20)
(reverse result)
(function-name
(+ i 1)
(+ j 1)
(cons (format #f "/file/read-case \"C:/DataProcessing/Case~a-time~a-sec/test/Case~a-time~a-sec.cas\"" i j i j)
result)))))
(for-each ti-menu-load-string (make-strings))
很好的一点是,您可以进行单元测试
生成字符串
,扩展它以获取输入变量等 什么使你认为(set!j(+j1))
不会做你想做的事?什么使你认为(set!j(+j1))
不会做你想做的事?谢谢!这很有效。你能检查一下我添加的更新吗?我认为如果把问题分成几部分,问题就可以解决。我希望我没有在帖子中制造更多的混乱@Emma它们是不相关的问题,因此在do
循环中扩展关于变量的问题不是一个好主意。您可以使用+
添加数字。例如,(+61/10);=>6.1
。我觉得。想想下一个想要在多个变量上得到帮助的人。你的编辑对他们有用还是让人困惑?如果您需要,我会还原并创建一个新查询。!您建议的方法(+61/10);=>6.1
用于读取一个案例(一个外部do循环),但在第二个循环中失败:在第一个循环中:i
将是10
,j=5
,datafilenum
将从:5.100=>6.000
,在第二个循环中:i=11
,j=6
和datafilenum
将从6.100=>7.000
更改,我不知道如何使datafilenum
成为小数点后有3位数字的变量。如您所见,需要将变量j
与小数点后的数字连接起来。希望这能澄清问题。Stackoverflow不建议删除问题,因为这可能会导致您的帐户无法提出新问题@艾玛:我建议你将更改还原为保留主题。你们可以使用~0,3F
,它会像我在《谢谢你们》中所说的那个样,将右边的焊盘归零!这很有效。你能检查一下我添加的更新吗?我认为如果把问题分成几部分,问题就可以解决。我希望我没有在帖子中制造更多的混乱@Emma它们是不相关的问题,因此在do
循环中扩展关于变量的问题不是一个好主意。您可以使用+
添加数字。例如,(+61/10);=>6.1
。我觉得。想想下一个想要在多个变量上得到帮助的人。你的编辑对他们有用还是让人困惑?如果您需要,我会还原并创建一个新查询。!您建议的方法(+61/10);=>6.1
用于读取一个案例(一个外部do循环),但在第二个循环中失败:在第一个循环中:i
将是10
,j=5
,datafilenum
将从:5.100=>6.000
,在第二个循环中:i=11
,j=6
和datafilenum
将从6.100=>7.000
更改,我不知道如何使datafilenum
成为小数点后有3位数字的变量。如您所见,需要将变量j
与小数点后的数字连接起来。希望这能澄清问题。Stackoverflow不建议删除问题,因为这可能会导致您的帐户无法提出新问题@艾玛:我建议你将更改还原为保留主题。您可以使用~0,3F
,它会将右侧的焊盘归零,如中所示