Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
5
Task/Algebraic-data-types/TXR/algebraic-data-types-1.txr
Normal file
5
Task/Algebraic-data-types/TXR/algebraic-data-types-1.txr
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
(defstruct (rbnode color left right data) ()
|
||||
color
|
||||
left
|
||||
right
|
||||
data)
|
||||
1
Task/Algebraic-data-types/TXR/algebraic-data-types-2.txr
Normal file
1
Task/Algebraic-data-types/TXR/algebraic-data-types-2.txr
Normal file
|
|
@ -0,0 +1 @@
|
|||
@(struct time year @y month @m)
|
||||
13
Task/Algebraic-data-types/TXR/algebraic-data-types-3.txr
Normal file
13
Task/Algebraic-data-types/TXR/algebraic-data-types-3.txr
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
(defmatch rb (color left right data)
|
||||
(flet ((var? (sym) (if (bindable sym) ^@,sym sym)))
|
||||
^@(struct rbnode
|
||||
color ,(var? color)
|
||||
left ,(var? left)
|
||||
right ,(var? right)
|
||||
data ,(var? data))))
|
||||
|
||||
(defmatch red (left right data)
|
||||
^@(rb :red ,left ,right ,data))
|
||||
|
||||
(defmatch black (left right data)
|
||||
^@(rb :black ,left ,right ,data))
|
||||
27
Task/Algebraic-data-types/TXR/algebraic-data-types-4.txr
Normal file
27
Task/Algebraic-data-types/TXR/algebraic-data-types-4.txr
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
(defun-match rb-balance
|
||||
((@(or @(black @(red @(red a b x) c y) d z)
|
||||
@(black @(red a @(red b c x) x) d z)
|
||||
@(black a @(red @(red b c y) d z) x)
|
||||
@(black a @(red b @(red c d z) y) x)))
|
||||
(new (rbnode :red
|
||||
(new (rbnode :black a b x))
|
||||
(new (rbnode :black c d z))
|
||||
y)))
|
||||
((@else) else))
|
||||
|
||||
(defun rb-insert-rec (tree x)
|
||||
(match-ecase tree
|
||||
(nil
|
||||
(new (rbnode :red nil nil x)))
|
||||
(@(rb color a b y)
|
||||
(cond
|
||||
((< x y)
|
||||
(rb-balance (new (rbnode color (rb-insert-rec a) b y))))
|
||||
((> x y)
|
||||
(rb-balance (new (rbnode color a (rb-insert-rec b) y))))
|
||||
(t tree)))))
|
||||
|
||||
(defun rb-insert (tree x)
|
||||
(match-case (rb-insert-rec tree x)
|
||||
(@(red a b y) (new (rbnode :black a b y)))
|
||||
(@else else)))
|
||||
Loading…
Add table
Add a link
Reference in a new issue