DrRacketは、lispで構築された関数型プログラミング言語です。関数言語で効果的な関数を「積み重ねる」 - DrRacket
私は(私は再作成作業のコンピュータにしようとしている)instruction
に取るrun-ins
と呼ばれ、指定された変数にいくつかの変更を加え副作用の機能を作成した今
、私はと呼ばれる、別の関数を作成したいですrun-loinst
のid EST:instrcutionsのリストを実行し、これはコードです:
(define (run-loinst loinst)
(map run-ins loinst))
結局のところ、私は繰り返し条件と命令のリストにrun-loinst
を実行すると、繰り返し命令が一度だけ実行され、そして以前のリスト要素wiの効果後期の実行前には行われません。
私は、複数の命令を実行し、その結果を前の用語の効果に順番に組み立てるコードを書くにはどうすればよいですか?
(ところで、以下run-ins
のコードで、機能をサポート)
(define (run-ins ins)
(cond [(string=? (ins-type ins) "+")
(set-Rs! (second (ins-lori ins))
(+ (* (first (ins-low ins)) (first (ins-lori ins))) (second (ins-lori ins))))]
[(string=? (ins-type ins) "set")
(set-Rs! (second (ins-lori ins))
(* (first (ins-low ins)) (first (ins-lori ins))))]
[else void]))
(define (set-Rs! index val)
(local [(define (fn-1 n acc)
(if (= n (length Rs))
acc
(cond [(= index n) (fn-1 (add1 n) (append acc (list val)))]
[else (fn-1 (add1 n) (append acc (list (list-ref Rs n))))])))]
(set! Rs (fn-1 0 empty))))
ラケットについてはわかりませんが、別のリスプであるClojureには、副作用関数のリストを実行するために 'doseq'が使用されています。ラケットには何か似たものがあるかもしれません。 – Carcigenicate
予期しない結果をもたらす 'run-loinst'の呼び出し例を追加することもできますか? – Cactus