27 lines
1.4 KiB
Plaintext
27 lines
1.4 KiB
Plaintext
|
|
(let (
|
|
|
|
foldl (let (helper (rec-lambda recurse (f z v i) (if (= i (len v)) z
|
|
(recurse f (f z (idx v i)) v (+ i 1)))))
|
|
(lambda (f z v) (helper f z v 0)))
|
|
foldr (let (helper (rec-lambda recurse (f z v i) (if (= i (len v)) z
|
|
(f (idx v i) (recurse f z v (+ i 1))))))
|
|
(lambda (f z v) (helper f z v 0)))
|
|
|
|
empty_dict []
|
|
put (lambda (m k v) (cons [k v] m))
|
|
get-value-helper (rec-lambda recurse (dict key i) (if (>= i (len dict))
|
|
(error (str key " not found in " dict))
|
|
(if (= key (idx (idx dict i) 0))
|
|
(idx (idx dict i) 1)
|
|
(recurse dict key (+ i 1)))))
|
|
get-value (lambda (dict key) (get-value-helper dict key 0))
|
|
add-dict-to-env (let (helper (rec-lambda recurse (env dict i)
|
|
(if (= i (len dict)) env
|
|
(recurse (eval [ [vau '_ [(idx (idx dict i) 0)] [ [vau 'inner [] 'inner] ] ] (idx (idx dict i) 1) ] env) dict (+ i 1)))))
|
|
(lambda (env dict) (helper env dict 0)))
|
|
)
|
|
(provide foldl foldr empty_dict put get-value add-dict-to-env)
|
|
)
|
|
|