如何在Scheme语言中的do循环中增加计数器?

时间:2017-12-16 21:14:07

标签: scheme global-variables counter do-loops

我想在Scheme语言的do循环中用一个简单的计数器增加一个,但我不熟悉该语言,并且尝试了许多脚本但没有成功。该代码将在Ansys Fluent中实现,以读取多个案例文件:

j

如何将新的Case10-time5-sec Case11-time6-sec ... 值传递给do-loop,以便我按照以下方式更改文件夹和文件名:

(set! j (+ j 1))

我知道tf.train.Saver()不是正确的做事方式,而是让你知道我想做什么。我认为变量值变量时调用变量并不困难吗?

1 个答案:

答案 0 :(得分:2)

在带有变量的列表中,您只需添加一个以下术语:

(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))

关于这一点的好处是你可以单元测试make-strings,扩展它以获取输入变量等。