3

MAX_OPERATIONSある口座から別の口座へ( ) 回の送金を実行したいと考えています。my-mapアカウントは、ハッシュ マップの呼び出し元(int アカウント ID、二重残高) に参照として格納されます。

送金は、ハッシュ マップから「ランダム インデックス」を取得し、それaccount-fromに渡しtransferます。両方を修正する必要がありますaccount-destinationamount

残念ながら、私はそれを機能させることはできません。

(defn transfer [from-account to-account amount]
  (dosync
    (if (> amount @from-account)
      (throw (Exception.  "Not enough money")))
    (alter from-account - amount)
    (alter to-account + amount)))

(defn transfer-all []
  (dotimes [MAX_OPERATIONS]
    (transfer (get mymap (rand-int[MAX_ACCOUNT]) :account-id) account-destination amount)))
4

2 に答える 2

5

私がすぐに見るいくつかの問題:

dotimes の構文が間違っています。ループ変数を含める必要があります。何かのようなもの:

(dotimes [i MAX_OPERATIONS]
   ....)

また、rand-int には、次のようなベクトルではなく整数パラメーターが必要です。

(rand-int MAX_ACCOUNT)

また、あなたの (get ...) 呼び出しが意図したとおりに機能しているかどうかもわかりません。現在書かれているように:account-id、ランダムに生成された整数キーが見つからない場合、キーワードを返します。これは、伝達関数が from-account と to-account として 2 つの参照を必要とするため、問題を引き起こします。

より一般的なアドバイスとして、これを REPL で少しずつコーディングして、各部分が意図したとおりに機能することを確認する必要があります。多くの場合、これは Clojure で開発するための最良の方法です。テストせずに一度に大量のコードを書きすぎると、いくつかのエラーが含まれる可能性が高くなり、問題の根本を追跡しようとして迷子になる可能性があります。

于 2012-03-05T14:27:51.187 に答える