2017-01-07 6 views
0

私はまだClojureでnoobです。大学の銀行取引シナリオに関する問題を解決しようとしています。Clojure:銀行取引の例を参考にしてください。

だから問題は非常に簡単です、私はクレジット、デビットとお金のソリューションを開発する必要があります。

私はここに停止:

(def account 
    (ref 100)) 

(defn credit [account amount] 
    "Credit" 
    (dosync 
    (alter account + amount))) 


(defn debit [account amount] 
    "Debit" 
    (dosync 
    (if (> amount (balance account)) 
     (throw (Exception. "Insuficient Funds")) 
     (alter account - amount)))) 

(defn transfer [from to amount] 
    "Transfer" 
    (dosync 
    (if (<= amount (balance from)) 
     (do 
     (Thread/sleep 10) 
     (debit from amount) 


     (credit to amount)) 
     (throw 
     (Exception. "Insuficient Funds"))))) 

を私は理解しにくいと上記のコードにその何も作業していないと思います。

私のような上記の各機能でメモリに口座番号、取引の説明、データ量およびストレージを追加する必要があります

(defn credit [account description data amount] 
    "Credit" 
    (dosync 
    (alter account + amount))) 

私はハッシュマップ、ベクター、および他のものにしようとしたが、のdidnています仕事はありません。また、私はこの本でこの解決策を見つけようとしています:Clojure Programming O'Reilly、しかしまだ実装するのは難しいです。

ありがとうございます。詳細が必要な場合はお知らせください。

+2

? – jmargolisvt

+0

各ファンクションに他の「パラメータ」を追加する必要があります。上の質問を編集しましたが、それは明確ですか? – junis087678

+1

現在、あなたの 'credit'関数は単一の値を生成します。一連の値を生成しますか? '(クレジットアカウント20)'は '' 120 "deposit"タイムスタンプ "のようなものを生成するでしょうか? 'assoc-in'と一緒に仕事をしたことがありますか? 「データ」とは何でしょうか? – jmargolisvt

答えて

0

私はこのシナリオを開発する方法を見つけたと思います。あなたの質問は正確には何

銀行口座を作成するときに、私はレフリーと必要なすべてのデータを保存するための構造(名口座、数アカウントと作成されるすべてのトランザクションでの動作リスト)を使用しています

(defn create-account [name account-number] 
    "Create account" 
    (ref (merge {:name name :account-number account-number :operations '()}))) 

(def joey 
    "Account for tests" 
    (create-account "joey" 12345678)) 
関連する問題