More vau usage working
This commit is contained in:
@@ -47,7 +47,7 @@
|
|||||||
.env_marked (lambda (x) (idx x 1))
|
.env_marked (lambda (x) (idx x 1))
|
||||||
.env_real (lambda (x) (idx x 2))
|
.env_real (lambda (x) (idx x 2))
|
||||||
|
|
||||||
env-lookup-helper (rec-lambda recurse (dict key i fail success) (cond (and (= i (- (len dict)) 1) (= nil (idx dict i))) (fail)
|
env-lookup-helper (rec-lambda recurse (dict key i fail success) (cond (and (= i (- (len dict) 1)) (= nil (idx dict i))) (fail)
|
||||||
(= i (- (len dict) 1)) (recurse (idx (idx dict i) 1) key 0 fail success)
|
(= i (- (len dict) 1)) (recurse (idx (idx dict i) 1) key 0 fail success)
|
||||||
(= key (idx (idx dict i) 0)) (success (idx (idx dict i) 1))
|
(= key (idx (idx dict i) 0)) (success (idx (idx dict i) 1))
|
||||||
true (recurse dict key (+ i 1) fail success)))
|
true (recurse dict key (+ i 1) fail success)))
|
||||||
@@ -76,8 +76,8 @@
|
|||||||
partial_eval_helper (rec-lambda recurse (x env comb_to_mark_map)
|
partial_eval_helper (rec-lambda recurse (x env comb_to_mark_map)
|
||||||
(cond (= x true) [comb_to_mark_map ['val true ]]
|
(cond (= x true) [comb_to_mark_map ['val true ]]
|
||||||
(= x false) [comb_to_mark_map ['val false]]
|
(= x false) [comb_to_mark_map ['val false]]
|
||||||
(env? x) (error "called partial_eval with an env " x)
|
(env? x) (error (str "called partial_eval with an env " x))
|
||||||
(combiner? x) (error "called partial_eval with a combiner, not yet supported (assuming just parsed symbols etc) " x)
|
(combiner? x) [comb_to_mark_map (get-value comb_to_mark_map x)]
|
||||||
(string? x) [comb_to_mark_map ['val x]]
|
(string? x) [comb_to_mark_map ['val x]]
|
||||||
(symbol? x) [comb_to_mark_map (env-lookup env x)]
|
(symbol? x) [comb_to_mark_map (env-lookup env x)]
|
||||||
(int? x) [comb_to_mark_map ['val x]]
|
(int? x) [comb_to_mark_map ['val x]]
|
||||||
@@ -97,23 +97,24 @@
|
|||||||
(let ([comb_to_mark_map p] (recurse p env comb_to_mark_map))
|
(let ([comb_to_mark_map p] (recurse p env comb_to_mark_map))
|
||||||
[comb_to_mark_map (concat ac [p])]))
|
[comb_to_mark_map (concat ac [p])]))
|
||||||
[comb_to_mark_map []]
|
[comb_to_mark_map []]
|
||||||
params))
|
(map strip params)))
|
||||||
(param-recurse (- wrap 1) evaled_params comb_to_mark_map))
|
(param-recurse (- wrap 1) evaled_params comb_to_mark_map))
|
||||||
[comb_to_mark_map params])
|
[comb_to_mark_map params])
|
||||||
) wrap_level params comb_to_mark_map)
|
) wrap_level (map (lambda (p) ['val p]) (slice x 1 -1)) comb_to_mark_map)
|
||||||
de_entry (if (!= nil de?) [ [de? env] ]
|
de_entry (if (!= nil de?) [ [de? env] ]
|
||||||
[])
|
[])
|
||||||
|
_ (println "appropriately evaled params " appropriatly_evaled_params)
|
||||||
inner_env ['env (concat (zip params appropriatly_evaled_params) de_entry [se]) nil]
|
inner_env ['env (concat (zip params appropriatly_evaled_params) de_entry [se]) nil]
|
||||||
|
;_ (println "inner_env is " inner_env)
|
||||||
) (recurse body inner_env comb_to_mark_map))
|
) (recurse body inner_env comb_to_mark_map))
|
||||||
true (error (str "Partial eval noticed that you will likely call not a function " x))))
|
true (error (str "Partial eval noticed that you will likely call not a function " x))))
|
||||||
(nil? x) [comb_to_mark_map ['val x]]
|
(nil? x) [comb_to_mark_map ['val x]]
|
||||||
|
true (error (str "impossible partial_eval value " x))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
needs_params_val_lambda (vau de (f_sym) (let (
|
needs_params_val_lambda (vau de (f_sym) (let (
|
||||||
actual_function (eval f_sym de)
|
actual_function (eval f_sym de)
|
||||||
handler (lambda (de comb_to_mark_map params) (let (
|
handler (lambda (de comb_to_mark_map params) (let (
|
||||||
[comb_to_mark_map evaled_params] (map (lambda (x) (partial_eval_helper x de comb_to_mark_map)) params)
|
|
||||||
[comb_to_mark_map evaled_params] (foldl (lambda ([comb_to_mark_map evaleds] x) (let (
|
[comb_to_mark_map evaled_params] (foldl (lambda ([comb_to_mark_map evaleds] x) (let (
|
||||||
[comb_to_mark_map evaled] (partial_eval_helper x de comb_to_mark_map)
|
[comb_to_mark_map evaled] (partial_eval_helper x de comb_to_mark_map)
|
||||||
) [comb_to_mark_map (cons evaled evaleds)])) [comb_to_mark_map []] params)
|
) [comb_to_mark_map (cons evaled evaleds)])) [comb_to_mark_map []] params)
|
||||||
@@ -213,9 +214,11 @@
|
|||||||
(give_up get_line)
|
(give_up get_line)
|
||||||
(give_up write_file)
|
(give_up write_file)
|
||||||
['empty_env ['env [] empty_env]]
|
['empty_env ['env [] empty_env]]
|
||||||
|
nil
|
||||||
] root_env]
|
] root_env]
|
||||||
|
|
||||||
comb_to_mark_map (foldl (lambda (a x) (cond (comb? (idx x 1)) (put a (idx (idx x 1) 6) (idx x 1))
|
comb_to_mark_map (foldl (lambda (a x) (cond (= nil x) a
|
||||||
|
(comb? (idx x 1)) (put a (idx (idx x 1) 6) (idx x 1))
|
||||||
(prim_comb? (idx x 1)) (put a (idx (idx x 1) 2) (idx x 1))
|
(prim_comb? (idx x 1)) (put a (idx (idx x 1) 2) (idx x 1))
|
||||||
true a
|
true a
|
||||||
) ) empty_dict (idx root_marked_env 1))
|
) ) empty_dict (idx root_marked_env 1))
|
||||||
|
|||||||
@@ -13,12 +13,12 @@
|
|||||||
) fully_evaled))
|
) fully_evaled))
|
||||||
|
|
||||||
simple_add (read-string "(+ 1 2)")
|
simple_add (read-string "(+ 1 2)")
|
||||||
vau_with_add (read-string "(vau (x) (+ 1 2))")
|
vau_with_add (read-string "(vau (y) (+ 1 2))")
|
||||||
vau_with_add_called (read-string "((vau (x) (+ 1 2)) 4)")
|
vau_with_add_called (read-string "((vau (y) (+ 1 2)) 4)")
|
||||||
vau_with_passthrough (read-string "((vau (x) x) 4)")
|
vau_with_passthrough (read-string "((vau (y) y) 4)")
|
||||||
vau_with_no_eval_add (read-string "((vau (x) (+ 1 2 x)) 4)")
|
vau_with_no_eval_add (read-string "((vau (y) (+ 13 2 y)) 4)")
|
||||||
vau_with_add_p (read-string "(vau de (x) (+ (eval x de) (+ 1 2)))")
|
vau_with_add_p (read-string "(vau de (y) (+ (eval y de) (+ 1 2)))")
|
||||||
vau_with_add_p_called (read-string "((vau de (x) (+ (eval x de) (+ 1 2))) 4)")
|
vau_with_add_p_called (read-string "((vau de (y) (+ (eval y de) (+ 1 2))) 4)")
|
||||||
_ (test-case simple_add)
|
_ (test-case simple_add)
|
||||||
_ (test-case vau_with_add)
|
_ (test-case vau_with_add)
|
||||||
_ (test-case vau_with_add_called)
|
_ (test-case vau_with_add_called)
|
||||||
|
|||||||
Reference in New Issue
Block a user