diff --git a/bank-account.scm b/bank-account.scm new file mode 100644 index 0000000..1b8f42d --- /dev/null +++ b/bank-account.scm @@ -0,0 +1,52 @@ +;; +;; bank-account.scm +;; +;; Generic bank account records. +;; +;; ISC License +;; +;; Copyright 2023 Brmlab, z.s. +;; Dominik Pantůček +;; +;; Permission to use, copy, modify, and/or distribute this software +;; for any purpose with or without fee is hereby granted, provided +;; that the above copyright notice and this permission notice appear +;; in all copies. +;; +;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +;; WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +;; WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE +;; AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR +;; CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +;; OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +;; NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +;; CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +;; + +(declare (unit bank-account)) + +(module + ( + make-bank-account + bank-account-insert + ) + + (import scheme) + + ;; Bank account is represented as a list with list with the following + ;; elements: list of transactions, account number, bank code. This + ;; allows cheap transaction prepending. + (define (make-bank-account number bank) + (list '() number bank)) + + ;; Prepends given transaction to given bank account. It expects the + ;; transactions list to be the first element of the bank account + ;; list. + (define (bank-account-insert account transaction) + (cons (cons transaction (car account)) + (cdr account))) + + (define (make-bank-transaction id date amount currency varsym) + #f) + + )