Clojure: Ссылочный пример для банковской транзакции

Я все еще новичок в 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, но все еще сложно реализовать.

Спасибо за ваше время и дайте мне знать, если вам нужно больше информации.

1 ответ

Решение

Я думаю, что нашел способ развить этот сценарий.

При создании банковского счета я использую ссылки и структуру для сохранения всех необходимых данных (имя учетной записи, номер учетной записи и список операций со всеми транзакциями, которые будут созданы)

(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))
Другие вопросы по тегам