2017-01-07 56 views
0

我仍然在Clojure noobot,知道我正在嘗試解決涉及大學銀行交易場景的問題。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))) 

我與散列映射,載體和其他東西嘗試,但沒沒有工作。我也試圖在本書中找到這個解決方案:Clojure編程O'reilly,但仍然很難實現。

謝謝你的時間,讓我知道你是否需要更多的信息。

+2

什麼是你的問題完全是一個結構的銀行賬戶? – jmargolisvt

+0

我應該在他們可以工作的方式中添加其他「參數」在每個功能,我已經編輯我的問題上面,是否清楚? – junis087678

+1

不完全。現在你的'credit'函數產生一個單一的值。你想讓它產生一系列的價值嗎?所以'(信用賬戶20)'會產生類似'[120'存款'時間戳]'的東西?您是否嘗試過使用'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))