Sell book works!

This commit is contained in:
didier amyot committed 2018-05-26 16:47:02 -04:00
1 parent 0d126be10c
commit 1fa719ffe3
6 files changed
+239 -9

No files matched your search

+25 -5
View File
@@ -1,10 +1,17 @@
(ns book.core
(:import [book.PersistentSortedList])
(:require [book.order]
[clojure.spec.alpha :as s]
[clojure.edn :as edn])
(:gen-class))
(defn sorted-list [& keys]
(book.PersistentSortedList/create (seq keys)))
(defn sorted-list-by [comparator & keys]
(book.PersistentSortedList/create comparator (seq keys)))
;; Let say a book is two collections. The first called
;; sell-book contains all the sell orders. The second
@@ -12,7 +19,14 @@
(defn create-book [& args]
(let [cmp #(< (:price %1) (:price %2))]
(apply sorted-set-by cmp args)))
(apply sorted-list-by cmp args)))
(defn sorted-set-rest [s]
(print "=>" s)
(if (empty? s)
s
(disj s (first s))))
(def book {:sell (create-book) :buy (create-book)})
@@ -65,12 +79,18 @@
(rest new-book))))
(defn leftover-order [order trades]
(let [traded-quantity (reduce + (map :book.order/quantity trades))
leftover-quantity (- (:quantity order) traded-quantity)]
(when (pos? leftover-quantity)
(assoc order :quantity leftover-quantity))))
(defn match-buy-order-in-sell-book [sell-book order]
(let [trades-1 [(create-trade order (first sell-book))]
trades (create-sell-trades order sell-book)
new-book (compute-new-sell-book-after-trades sell-book trades)]
[trades new-book]))
(let [trades (create-sell-trades order sell-book)
new-book (compute-new-sell-book-after-trades sell-book trades)
new-buy-order (leftover-order order trades)]
[trades new-book new-buy-order]))
(defn place-buy-order [book order]