diff options
| author | Joel Martin <github@martintribe.org> | 2014-10-09 18:05:30 -0500 |
|---|---|---|
| committer | Joel Martin <github@martintribe.org> | 2014-10-09 18:05:30 -0500 |
| commit | d667a1bb2e7294f8722bb31f1e6e8207b971c913 (patch) | |
| tree | c79dff4e32c3d1a73369ba3203b435f0212aab45 /go/src/step8_macros | |
| parent | 82efc357ba67da1eaf35ca92b6f249a344aae8d5 (diff) | |
| download | mal-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.go | 8 |
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)) |
