I am still noob at Clojure, right know I am trying to resolve a problem involving bank transaction scenario for university.
The problem is quite easy: I have to develop a solution to credit, debit and transfer money.
I stopped here:
(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")))))
I think its nothing to hard to understand and the code above is working.
I should add the account number, description of the transaction, data and amount and storage in memory in each function above like:
(defn credit [account description data amount]
"Credit"
(dosync
(alter account + amount)))
I have tried with hash-map, vectors and other things but didn't work. Also I am trying to find this solution in this book: Clojure Programming O'reilly, but still difficult to implement.
Thank you for your time and let me know if you need more infos.
I think I found a way to develop this scenario.
When creating an bank account I am using refs and a structure to save all data needed (name account, number account and a operation list with all transactions that will be created)