2017-12-16 25 views
0

私は、Scheme言語のdo-loop内で単純に1つずつカウンタを増やしたいと思っていますが、私はその言語に精通しておらず、成功していない多くのスクリプトを試しています。コードが複数の場合はファイルを読み取るためにANSYSの流暢で実装されようとしている:Scheme言語のdo-loopでカウンタを増やすには?

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

私は次のように変更したフォルダとファイル名を取得するようにDOループに新しいj値を渡す方法:

します
Case10-time5-sec 
Case11-time6-sec 
... 

(set! j (+ j 1))は正しい方法ではなく、自分が何をしようとしているのかを知ることができます。値を変更したときに変数を呼び出すのは難しいはずがないと思いますか?あなただけNotherの項を追加しVARSと一覧で

+0

あなたは '(set!j(+ j 1))'があなたの望むことをしないと思いますか? –

答えて

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

を実際にその後、あなたはそれを機能させることもできます:あなたはletという名前で、このようにそれなしでこれを行うことができます

(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、入力変数などを取るためにそれを拡張します。

+0

ありがとう!それはとてもうまくいく。私が追加した更新を確認してください。私はそれが分割されていると問題が解決できると思った。私はポストにもっと混乱を起こさなかったことを願っています! – Emma

+0

@ Ema彼らは無関係な問題なので、 'do'ループの変数に関するこの質問を拡張することは素晴らしい考えではありません。あなたは '+'で数字を追加します。例えば。 '(+ 6 1/10); ==> 6.1 'である。私は[私はこれまでにこれに答えました](https://stackoverflow.com/q/47822902/1565698)と感じています。複数の変数について助けが必要な次の人について考えてみましょう。あなたの編集はそれらのために有用か、それともちょっと混乱していますか?あなたが必要ならば私は元に戻って新しいクエースティオンを作りました。 – Sylwester

+0

!あなたが提案する方法 '(+ 6 1/10); ==> 6.1は1つのケース(1つの外部do-loop)を読み込むために働きますが、2番目のループでは失敗します: 最初のループで 'i'は' 10'、 'j = 5'、' datafilenum' '5.100 => 6.000'から2番目のループ: ' i = 11'、 'j = 6'、' datafilenum'が '6.100 => 7.000'から変更されます 小数点の後に3桁の変数として 'datafilenum'を作ります。ご覧のとおり、変数jを小数点以下の桁に連結する必要があります。これが問題を明確にすることを願っています。 – Emma

関連する問題