aboutsummaryrefslogtreecommitdiff
path: root/go/src/core/core.go
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-10-06 23:31:11 -0500
committerJoel Martin <github@martintribe.org>2014-10-06 23:31:11 -0500
commitaeabd2145ff133cc6991166d8f1023ed33e223c8 (patch)
tree072243e5aab3a862c9416d533d362185d9153bb9 /go/src/core/core.go
parentad95503cea8ca85e9188effa87681275283157bf (diff)
downloadmal-aeabd2145ff133cc6991166d8f1023ed33e223c8.tar.gz
mal-aeabd2145ff133cc6991166d8f1023ed33e223c8.zip
go: add step7_quote
Diffstat (limited to 'go/src/core/core.go')
-rw-r--r--go/src/core/core.go16
1 files changed, 16 insertions, 0 deletions
diff --git a/go/src/core/core.go b/go/src/core/core.go
index 94e2452..65475bb 100644
--- a/go/src/core/core.go
+++ b/go/src/core/core.go
@@ -42,6 +42,20 @@ func slurp(a []MalType) (MalType, error) {
// Sequence functions
+func cons(a []MalType) (MalType, error) {
+ val := a[0]
+ lst, e := GetSlice(a[1]); if e != nil { return nil, e }
+
+ return List{append([]MalType{val}, lst...)}, nil
+}
+
+func concat(a []MalType) (MalType, error) {
+ lst1, e := GetSlice(a[0]); if e != nil { return nil, e }
+ lst2, e := GetSlice(a[1]); if e != nil { return nil, e }
+
+ return List{append(lst1, lst2...)}, nil
+}
+
func empty_Q(a []MalType) (MalType, error) {
switch obj := a[0].(type) {
case List: return len(obj.Val) == 0, nil
@@ -96,6 +110,8 @@ var NS = map[string]MalType{
"list?": func(a []MalType) (MalType, error) {
return List_Q(a[0]), nil },
+ "cons": cons,
+ "concat": concat,
"empty?": empty_Q,
"count": count,
}