Fix a bug in eval strip not actually stripping in the proper eval way - f there's a later anywhere in there, it has to desist, which is now implemented. Added do tests - we have to add support for & params, which I had forgotten, and I belive it now loops infinately because it tries to partially evaluate a recursive function!

This commit is contained in:
Nathan Braswell
2021-08-25 01:32:24 -04:00
parent 649e0107d4
commit 26e9c5a41f
2 changed files with 38 additions and 7 deletions

View File

@@ -74,6 +74,27 @@
(+ a x b))))
))) (vau de (s v b) (eval (array (array vau (array s) b) (eval v de)) de)))")
do1_test (read-string "((wrap (vau (let1)
(let1 lambda (vau se (p b) (wrap (eval (array vau p b) se)))
(let1 do_helper (lambda (recurse s i se) (cond (= i (len s)) nil
(= i (- (len s) 1)) (eval (idx s i) se)
(eval (idx s i) se) (recurse recurse s (+ i 1) se)
true (recurse recurse s (+ i 1) se)))
(let1 do (vau se (& s) (do_helper do_helper s 0 se))
(do (println 1 2 3)
(println 4 5 6))
))))) (vau de (s v b) (eval (array (array vau (array s) b) (eval v de)) de)))")
do2_test (read-string "((wrap (vau (let1)
(let1 lambda (vau se (p b) (wrap (eval (array vau p b) se)))
(let1 do_helper (lambda (recurse s i se) (cond (= i (len s)) nil
(= i (- (len s) 1)) (eval (idx s i) se)
(eval (idx s i) se) (recurse recurse s (+ i 1) se)
true (recurse recurse s (+ i 1) se)))
(let1 do (vau se (& s) (do_helper do_helper s 0 se))
(do (println 1 2 3)
(println 4 5 6))
))))) (vau de (s v b) (eval (array (array vau (array s) b) (eval v de)) de)))")
;big_test1 [[vau ['*ARGV*] (read-string (slurp "./prelude.kp"))] ["" "-C" "1339"]]
@@ -110,6 +131,9 @@
_ (test-case lambda2_test)
_ (test-case lambda3_test)
_ (test-case do1_test)
_ (test-case do2_test)
;_ (println "THE BIG SHOW")
;_ (println big_test1)
;_ (test-case big_test1)