# MATH introduce environment / hashmap structure
# this section needs a LOT more examples :-
# note that at the time of writing (h 1 2) is same as ((h) 1 2)
[hear] (define hash-add /
lambda (h x y z) (if (= (z) (x)) (y) (h (z))));
[hear] (define hash-ref / lambda (h x) (h (x)));
[hear] (define hash-null / ? x / undefined);
[hear] (define test-hash /
hash-add (hash-add (hash-null) 3 2) 4 9);
[hear] (= (hash-ref (test-hash) 4) 9);
[hear] (= (hash-ref (test-hash) 3) 2);
[hear] (= (hash-ref (test-hash) 8) (undefined));
[hear] (= (hash-ref (test-hash) 15) (undefined));
[hear] (= (hash-ref (hash-add (test-hash) 15 33) 15) 33);
[hear] (= (hash-ref (test-hash) 15) (undefined));
[hear] (define make-hash /
? x /
if (list= (x) (vector))
(hash-null)
(hash-add
(make-hash (tail / x))
(first /
head /
x)
(second /
head /
x)));
[hear] (= (hash-ref
(make-hash /
vector (pair 3 10) (pair 2 20) (pair 1 30))
3)
10);
[hear] (= (hash-ref
(make-hash /
vector (pair 3 10) (pair 2 20) (pair 1 30))
1)
30);