(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))) reverse (lambda (x) (foldl (lambda (acc i) (cons i acc)) [] x)) 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 reverse empty_dict put get-value add-dict-to-env) )