2011-12-17 9 views
0

gen-sim-map関数を書いた方法に何か問題があります。 1つの口座番号の後に停止し、ベクトルの最後の番号で停止します。私は何が間違っているのだろうと思っています。私は関数に繰り返しを適用することで問題を解決することができますが、それは私に間違っているようです。1つの口座番号の後に停止するのはなぜですか?

ここにはデータとコールがあります。関数defはそれ以下です。

(def acct-nums (gen-acct-nums 5)) 
#'ba1-app/acct-nums 

ba1-app=> acct-nums 
[10000 10001 10002 10003 10004 10005] 

ba1-app=> (gen-sim-map acct-nums) 
{10005 [\W 160.12]} 

(defn random-trans 
    [] 
    (nth avail-trans (.nextInt random (count avail-trans)))) 

(defn random-amount 
    [] 
    (float (/ (.nextInt random (count (range 1 10000))) 25))) 

; Generate an account number. The range is arbitrary to make it look a real bank account #. 
(defn gen-acct-nums [range-end-idx] 
    (vec (range 10000 (+ 10000 range-end-idx 1)))) 

(defn gen-sim-map [acct-nums] 
    (reduce 
     (fn [sim-map one-acct-num] 
      (let [trans (random-trans) 
        amt (random-amount)] 
       { one-acct-num (vector trans amt) })) 
     {} 
     acct-nums)) 
+0

どこにアキュムレータ( 'sim-map')を変更しているのかわかりません。 –

+0

はい、私はそれを忘れてしまったので、最後の価値を見たのは正しいのですか?他は処理されましたが蓄積されませんでしたか? – octopusgrabbus

答えて

2

私はアキュムレータを変更していないと思われます。

(defn gen-sim-map [acct-nums] 
    (reduce 
     (fn [sim-map one-acct-num] 
      (let [trans (random-trans) 
       amt (random-amount)] 
       (assoc sim-map one-acct-num (vector trans amt)))) ; <--- 
     {} 
     acct-nums)) 

またはそれに類するものを見ることが期待されます。

関連する問題