aboutsummaryrefslogtreecommitdiff
path: root/go/src/step7_quote
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/step7_quote
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/step7_quote')
-rw-r--r--go/src/step7_quote/step7_quote.go14
1 files changed, 7 insertions, 7 deletions
diff --git a/go/src/step7_quote/step7_quote.go b/go/src/step7_quote/step7_quote.go
index 999129e..d93f620 100644
--- a/go/src/step7_quote/step7_quote.go
+++ b/go/src/step7_quote/step7_quote.go
@@ -54,7 +54,7 @@ func quasiquote(ast MalType) MalType {
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 {
@@ -116,7 +116,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 }
@@ -128,7 +128,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)
}
ast = a2
env = let_env
@@ -198,11 +198,11 @@ func rep(str string) (MalType, error) {
func main() {
// core.go: defined using go
for k, v := range core.NS {
- repl_env.Set(k, Func{v.(func([]MalType)(MalType,error)),nil})
+ repl_env.Set(Symbol{k}, Func{v.(func([]MalType)(MalType,error)),nil})
}
- repl_env.Set("eval", Func{func(a []MalType) (MalType, error) {
+ repl_env.Set(Symbol{"eval"}, Func{func(a []MalType) (MalType, error) {
return EVAL(a[0], repl_env) },nil})
- repl_env.Set("*ARGV*", List{})
+ repl_env.Set(Symbol{"*ARGV*"}, List{})
// core.mal: defined using the language itself
rep("(def! not (fn* (a) (if a false true)))")
@@ -214,7 +214,7 @@ func main() {
for _,a := range os.Args[2:] {
args = append(args, a)
}
- repl_env.Set("*ARGV*", List{args,nil})
+ repl_env.Set(Symbol{"*ARGV*"}, List{args,nil})
if _,e := rep("(load-file \"" + os.Args[1] + "\")"); e != nil {
fmt.Printf("Error: %v\n", e)
os.Exit(1)