Basic provide & with_import, fix a rep bug where all but first execution was in root_env instead of standard env
This commit is contained in:
@@ -29,9 +29,35 @@
|
|||||||
true (vapply let1 (array (idx vs 0) (idx vs 1) (array recurse (slice vs 2 -1) b)) de)))))
|
true (vapply let1 (array (idx vs 0) (idx vs 1) (array recurse (slice vs 2 -1) b)) de)))))
|
||||||
|
|
||||||
(let (
|
(let (
|
||||||
rec-lambda (vau se (p b) (eval (array Y (array lambda (quote (recurse)) (array lambda p b)))))
|
rec-lambda (vau se (p b) (eval (array Y (array lambda (quote (recurse)) (array lambda p b))) se))
|
||||||
rep (Y (lambda (recurse) (wrap (vau de () (do (println (eval (read-string (get_line "> ")) de))
|
rep (vY (lambda (recurse) (wrap (vau de () (do (println (eval (read-string (get_line "> ")) de))
|
||||||
(recurse))))))
|
(eval (array recurse) de))))))
|
||||||
|
|
||||||
|
if (vau de (con than & else) (cond (eval con de) (eval than de)
|
||||||
|
(> (len else) 0) (eval (idx else 0) de)
|
||||||
|
true nil))
|
||||||
|
|
||||||
|
map (lambda (f l)
|
||||||
|
(let (helper (rec-lambda (f l n i)
|
||||||
|
(if (= i (len l))
|
||||||
|
n
|
||||||
|
(do (set-idx! n i (f (idx l i)))
|
||||||
|
(recurse f l n (+ i 1))))))
|
||||||
|
(helper f l (array-with-len (len l)) 0)))
|
||||||
|
flat_map (lambda (f l)
|
||||||
|
(let (helper (rec-lambda (f l n i)
|
||||||
|
(if (= i (len l))
|
||||||
|
n
|
||||||
|
(recurse f l (concat n (f (idx l i))) (+ i 1)))))
|
||||||
|
(helper f l (array) 0)))
|
||||||
|
map_with_idx (lambda (f l)
|
||||||
|
(let (helper (rec-lambda (f l n i)
|
||||||
|
(if (= i (len l))
|
||||||
|
n
|
||||||
|
(do (set-idx! n i (f i (idx l i)))
|
||||||
|
(recurse f l n (+ i 1))))))
|
||||||
|
(helper f l (array-with-len (len l)) 0)))
|
||||||
|
|
||||||
is_pair? (lambda (x) (and (array? x) (> (len x) 0)))
|
is_pair? (lambda (x) (and (array? x) (> (len x) 0)))
|
||||||
|
|
||||||
quasiquote (vY (lambda (recurse) (vau de (x)
|
quasiquote (vY (lambda (recurse) (vau de (x)
|
||||||
@@ -44,20 +70,33 @@
|
|||||||
true
|
true
|
||||||
(concat (array (vapply recurse (array (idx x 0)) de)) (vapply recurse (array (slice x 1 -1)) de))))
|
(concat (array (vapply recurse (array (idx x 0)) de)) (vapply recurse (array (slice x 1 -1)) de))))
|
||||||
true x))))
|
true x))))
|
||||||
scope_let (quasiquote ((unquote let) (
|
provide (vau de (& items) (array let
|
||||||
root_env (unquote root_env)
|
(flat_map (lambda (item) (array item (eval item de))) items)))
|
||||||
lambda (unquote lambda)
|
scope_let_sans_import (provide
|
||||||
rec-lambda (unquote rec-lambda)
|
root_env
|
||||||
let (unquote let)
|
lambda
|
||||||
do (unquote do)
|
rec-lambda
|
||||||
concat (unquote concat)
|
let
|
||||||
lapply (unquote lapply)
|
do
|
||||||
vapply (unquote vapply)
|
if
|
||||||
Y (unquote Y)
|
concat
|
||||||
vY (unquote vY)
|
map
|
||||||
quasiquote (unquote quasiquote)
|
flat_map
|
||||||
)
|
map_with_idx
|
||||||
))
|
lapply
|
||||||
|
vapply
|
||||||
|
Y
|
||||||
|
vY
|
||||||
|
quasiquote
|
||||||
|
provide
|
||||||
|
)
|
||||||
|
insert_into_scope_let (lambda (scope_let name item) (array (idx scope_let 0) (concat (idx scope_let 1) (array name item))))
|
||||||
|
; Gotta insert with_import into scope_let via vY combinator so it can use itself
|
||||||
|
with_import (vY (lambda (recurse) (vau de (lib_path code)
|
||||||
|
(let (imported_scope_let (eval (concat (insert_into_scope_let scope_let_sans_import (quote with_import) recurse)
|
||||||
|
(array (read-string (slurp (eval lib_path de))))) root_env))
|
||||||
|
(eval (concat imported_scope_let (array code)) de)))))
|
||||||
|
scope_let (insert_into_scope_let scope_let_sans_import (quote with_import) with_import)
|
||||||
)
|
)
|
||||||
|
|
||||||
(do
|
(do
|
||||||
|
|||||||
Reference in New Issue
Block a user