在Scheme语言中,如何在与外部do-loop连接的内部do-loop中分配变量计数器?

问题描述 投票:0回答:1

我想在Ansys Fluent中读取10个案例文件,对于每个案例文件,有10个数据文件需要读取。 Ansys Fluent使用Scheme编程语言。我必须设法在这里(Evaluating a floating point variable in Scheme language)和这里(How to increase counter in a do-loop within Scheme language?)获得代码中的个别问题的答案,但在收集个别答案时,我意识到我需要一个新的代码用于通过计数器读取数据文件做环。以下是包含来自其他问题的解决方案的代码:

(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))
  (do ((datafilenum 5.100 (+ datafilenum 0.100)))
      ((>= datafilenum 6.000))
    (ti-menu-load-string (format #f "/file/read-data \"C:/DataProcessing/Case~a-time~a-sec/test/Case~a-time~a-sec-~.3f.dat\"" i j i j datafilenum))
    (ti-menu-load-string (format #f "/plot plot n \"C:/DataProcessing/Case~a-time~a-sec/test/water-vof/column-water-vof-at-~.3fs.txt\" y n n water vof y 0 1 0 16 ()" i j datafilenum))))

我想在这里实现的是:阅读案例文件

Case10-time5-sec.cas

然后它读取10个数据文件并绘制答案

Case10-time5-sec-5.100.dat
Case10-time5-sec-5.200.dat
...
Case10-time5-sec-6.000.dat

下一循环:

Case11-time6-sec.cas

阅读10个数据文件并绘制答案

Case11-time6-sec-6.100.dat
Case11-time6-sec-6.200.dat
...
Case11-time6-sec-7.000.dat

下一循环......

那么,如何在datafilenum5.1006.100等中将7.100开头的7.100更改为j,当j.100在上部循环中更改值时,类似于column-water-vof-at-~.3fs.txt并将此值附加到导出的文本文件6.000。当然,改变,7.0008.000j+1.000 ......,像j?这让我非常困惑,因为我使用了试验和错误来实现它!

variables scheme counter do-loops
1个回答
1
投票

如何获得号码。如果6.1是6并且您想要1/10,则使用标准数学运算将(define j 6) (+ j 1/10) ; ==> 61/10 (aka 6.1 exact) 添加到它。

format

函数SRFI-48 Intermediate Format Strings不是标准的,因此存在许多竞争实现。在61/10你可以这样做让6.100显示为(format #f "~0,3F" (+ j 1/10)) ; ==> "6.100"

(do ((i 10 (+ i 1))
     (j 5  (+ j 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))
  (do ((datafilenum (+ j 1/10) (+ datafilenum 1/10)))
      ((>= datafilenum (+ j 1)))
    (ti-menu-load-string (format #f "/file/read-data \"C:/DataProcessing/Case~a-time~a-sec/test/Case~a-time~a-sec-~0,3F.dat\"" i j i j datafilenum))
    (ti-menu-load-string (format #f "/plot plot n \"C:/DataProcessing/Case~a-time~a-sec/test/water-vof/column-water-vof-at-~0,3Fs.txt\" y n n water vof y 0 1 0 16 ()" i j datafilenum))))

所以把它们放在一起:

format

如果这不起作用,您需要编辑您正在使用的实现。例如。球拍有(require srfi/48)不同,但它也支持SRFI-48所以我用qazxswpoi测试了这个。我更喜欢使用SRFI而不是实现版本,因为以后移植到不同的实现或修订版RNRS会更容易。

© www.soinside.com 2019 - 2024. All rights reserved.