aboutsummaryrefslogtreecommitdiff
path: root/go/src/step3_env
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-12-18 20:33:49 -0600
committerJoel Martin <github@martintribe.org>2015-01-09 16:16:50 -0600
commitb8ee29b22fbaa7a01f2754b4d6dd9af52e02017c (patch)
treef4d977ed220e9a3f665cfbf4f68770a81e4c2095 /go/src/step3_env
parentaaba249304b184e12e2445ab22d66df1f39a51a5 (diff)
downloadmal-b8ee29b22fbaa7a01f2754b4d6dd9af52e02017c.tar.gz
mal-b8ee29b22fbaa7a01f2754b4d6dd9af52e02017c.zip
All: add keywords.
Also, fix nth and count to match cloure.
Diffstat (limited to 'go/src/step3_env')
-rw-r--r--go/src/step3_env/step3_env.go14
1 files changed, 7 insertions, 7 deletions
diff --git a/go/src/step3_env/step3_env.go b/go/src/step3_env/step3_env.go
index 0d975ba..0c45bf2 100644
--- a/go/src/step3_env/step3_env.go
+++ b/go/src/step3_env/step3_env.go
@@ -23,7 +23,7 @@ func READ(str string) (MalType, error) {
func eval_ast(ast MalType, env EnvType) (MalType, error) {
//fmt.Printf("eval_ast: %#v\n", ast)
if Symbol_Q(ast) {
- return env.Get(ast.(Symbol).Val)
+ return env.Get(ast.(Symbol))
} else if List_Q(ast) {
lst := []MalType{}
for _, a := range ast.(List).Val {
@@ -83,7 +83,7 @@ func EVAL(ast MalType, env EnvType) (MalType, error) {
case "def!":
res, e := EVAL(a2, env)
if e != nil { return nil, e }
- return env.Set(a1.(Symbol).Val, res), nil
+ return env.Set(a1.(Symbol), res), nil
case "let*":
let_env, e := NewEnv(env, nil, nil)
if e != nil { return nil, e }
@@ -95,7 +95,7 @@ func EVAL(ast MalType, env EnvType) (MalType, error) {
}
exp, e := EVAL(arr1[i+1], let_env)
if e != nil { return nil, e }
- let_env.Set(arr1[i].(Symbol).Val, exp)
+ let_env.Set(arr1[i].(Symbol), exp)
}
return EVAL(a2, let_env)
default:
@@ -127,13 +127,13 @@ func rep(str string) (MalType, error) {
}
func main() {
- repl_env.Set("+", func(a []MalType) (MalType, error) {
+ repl_env.Set(Symbol{"+"}, func(a []MalType) (MalType, error) {
return a[0].(int) + a[1].(int), nil })
- repl_env.Set("-", func(a []MalType) (MalType, error) {
+ repl_env.Set(Symbol{"-"}, func(a []MalType) (MalType, error) {
return a[0].(int) - a[1].(int), nil })
- repl_env.Set("*", func(a []MalType) (MalType, error) {
+ repl_env.Set(Symbol{"*"}, func(a []MalType) (MalType, error) {
return a[0].(int) * a[1].(int), nil })
- repl_env.Set("/", func(a []MalType) (MalType, error) {
+ repl_env.Set(Symbol{"/"}, func(a []MalType) (MalType, error) {
return a[0].(int) / a[1].(int), nil })
// repl loop