diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0a4623a --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ + +# Created by https://www.gitignore.io/api/racket +# Edit at https://www.gitignore.io/?templates=racket + +### Racket ### +# gitignore template for the Racket language +# website: http://www.racket-lang.org/ + +# DrRacket autosave files +*.rkt~ +*.rkt.bak +\#*.rkt# +\#*.rkt#*# + +# Compiled racket bytecode +compiled/ +*.zo + +# Dependency tracking files +*.dep + +# End of https://www.gitignore.io/api/racket diff --git a/bst.rkt b/bst.rkt new file mode 100644 index 0000000..9480c81 --- /dev/null +++ b/bst.rkt @@ -0,0 +1,53 @@ +#lang racket + +(define-struct node (value left right)) + +(define (search node value) (cond + [(= (node-value node) value) #t] + [(empty? node) #f] + [(> (node-value node) value) (search (node-left node) value)] + [else (search (node-right node) value)] + )) + +(define (insert node value) (cond + [(empty? node) (make-node value empty empty)] + [(> (node-value node) value) (make-node (node-value node) (insert (node-left node) value) (node-right node))] + [else (make-node (node-value node) (node-left node) (insert (node-right node) value))] + )) + +(define (bst-from-list lst) (cond + [(empty? lst) empty] + [else (insert (bst-from-list (rest lst)) (first lst))] + )) + +(define (rotate-left node) (if (empty? node) empty (let + ( + [x node] + [l (node-left node)] + [r (node-right node)]) + (let ( + [a (if (empty? l) empty (node-left l))] + [b (if (empty? l) empty (node-right l))] + [c (if (empty? r) empty (node-left r))] + [d (if (empty? r) empty (node-right r))] + ) ( + (make-node (node-value l) + a + (make-node (node-value x) + b + r) + ) + ))))) + +(define (height node) (cond + [(empty? node) 0] + [else (+ 1 (max (height (node-left node)) (height (node-right node))))] + )) + +(define (avlcheck node) (cond + [(empty? node) 0] + [(= (height (node-left node)) -1) -1] + [(= (height (node-right node)) -1) -1] + [(< 1 (abs (- (height (node-left node)) (height (node-right node))))) -1] + [else (+ 1 (max (height (node-left node)) (height (node-right node))))] + )) \ No newline at end of file diff --git a/lambda-calc.rkt b/lambda-calc.rkt new file mode 100644 index 0000000..d3f3d9c --- /dev/null +++ b/lambda-calc.rkt @@ -0,0 +1,5 @@ +#lang racket + +(define id (lambda (x) x)) + +(define Y (lambda (f) (lambda (x) (f (x x))) (lambda (x) (f (x x))))) \ No newline at end of file diff --git a/rbtree.rkt b/rbtree.rkt new file mode 100644 index 0000000..0687e70 --- /dev/null +++ b/rbtree.rkt @@ -0,0 +1,34 @@ +#lang racket +(define-struct node (value color left right)) + +(define (rotate-left node) (make-node + (node-value (node-right node)) + (node-color (node-right)) + (make-node + ) + (node-right (node-right node)) + (node-parent node))) + +(define (rotate-left node) (let + ((a (node-left node)) + (b node) + (c (node-right node)) + (x (node-left a)) + (y (node-right a)) + (z (node-left c)) + (w (node-right c))) + ( + make-node + (value c) + (color c) + (make-node (value b) (color b) (make-node + (value a) + (color a) + x + y + + )) + +(define (insert node value) (cond + [] + [])) \ No newline at end of file