aboutsummaryrefslogtreecommitdiff
path: root/go/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'go/src/core')
-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,
}