私はまだ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 Programming O'reillyですが、それでも実装は困難です。
お時間をいただきありがとうございます。さらに情報が必要な場合はお知らせください。