aboutsummaryrefslogtreecommitdiff
path: root/go/src/step8_macros
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-10-09 18:05:30 -0500
committerJoel Martin <github@martintribe.org>2014-10-09 18:05:30 -0500
commitd667a1bb2e7294f8722bb31f1e6e8207b971c913 (patch)
treec79dff4e32c3d1a73369ba3203b435f0212aab45 /go/src/step8_macros
parent82efc357ba67da1eaf35ca92b6f249a344aae8d5 (diff)
downloadmal-d667a1bb2e7294f8722bb31f1e6e8207b971c913.tar.gz
mal-d667a1bb2e7294f8722bb31f1e6e8207b971c913.zip
go: add stepA_more. try* and more core functions.
Diffstat (limited to 'go/src/step8_macros')
-rw-r--r--go/src/step8_macros/step8_macros.go8
1 files changed, 3 insertions, 5 deletions
diff --git a/go/src/step8_macros/step8_macros.go b/go/src/step8_macros/step8_macros.go
index 12f036a..6735275 100644
--- a/go/src/step8_macros/step8_macros.go
+++ b/go/src/step8_macros/step8_macros.go
@@ -75,7 +75,7 @@ func macroexpand(ast MalType, env EnvType) (MalType, error) {
a0 := slc[0]
mac, e = env.Get(a0.(Symbol).Val); if e != nil { return nil, e }
fn := mac.(MalFunc)
- ast, e = fn.Apply(slc[1:]); if e != nil { return nil, e }
+ ast, e = Apply(fn, slc[1:]); if e != nil { return nil, e }
}
return ast, nil
}
@@ -195,9 +195,7 @@ func EVAL(ast MalType, env EnvType) (MalType, error) {
ast = a2
}
case "fn*":
- fn := MalFunc{EVAL, a2, env, a1, false,
- func(outer EnvType, binds []MalType, exprs []MalType) (EnvType, error) {
- return NewEnv(outer, binds, exprs) }}
+ fn := MalFunc{EVAL, a2, env, a1, false, NewEnv}
return fn, nil
default:
el, e := eval_ast(ast, env)
@@ -206,7 +204,7 @@ func EVAL(ast MalType, env EnvType) (MalType, error) {
if MalFunc_Q(f) {
fn := f.(MalFunc)
ast = fn.Exp
- env, e = NewEnv(fn.Env, fn.Params.(List).Val, el.(List).Val[1:])
+ env, e = NewEnv(fn.Env, fn.Params, List{el.(List).Val[1:]})
if e != nil { return nil, e }
} else {
fn, ok := f.(func([]MalType)(MalType, error))