94e24527ec57cc4ab0494edd629ebbca944c3e65
18 func pr_str(a
[]MalType
) (MalType
, error
) {
19 return printer
.Pr_list(a
, true, "", "", " "), nil
22 func str(a
[]MalType
) (MalType
, error
) {
23 return printer
.Pr_list(a
, false, "", "", ""), nil
26 func prn(a
[]MalType
) (MalType
, error
) {
27 fmt
.Println(printer
.Pr_list(a
, true, "", "", " "))
31 func println(a
[]MalType
) (MalType
, error
) {
32 fmt
.Println(printer
.Pr_list(a
, false, "", "", " "))
36 func slurp(a
[]MalType
) (MalType
, error
) {
37 b
, e
:= ioutil
.ReadFile(a
[0].(string))
38 if e
!= nil { return nil, e
}
45 func empty_Q(a
[]MalType
) (MalType
, error
) {
46 switch obj
:= a
[0].(type) {
47 case List
: return len(obj
.Val
) == 0, nil
48 case Vector
: return len(obj
.Val
) == 0, nil
49 case nil: return true, nil
50 default: return nil, errors
.New("Count called on non-sequence")
54 func count(a
[]MalType
) (MalType
, error
) {
55 switch obj
:= a
[0].(type) {
56 case List
: return len(obj
.Val
), nil
57 case Vector
: return len(obj
.Val
), nil
58 case nil: return 0, nil
59 default: return nil, errors
.New("Count called on non-sequence")
65 var NS
= map[string]MalType
{
66 "=": func(a
[]MalType
) (MalType
, error
) {
67 return Equal_Q(a
[0], a
[1]), nil },
69 "pr-str": func(a
[]MalType
) (MalType
, error
) { return pr_str(a
) },
70 "str": func(a
[]MalType
) (MalType
, error
) { return str(a
) },
71 "prn": func(a
[]MalType
) (MalType
, error
) { return prn(a
) },
72 "println": func(a
[]MalType
) (MalType
, error
) { return println(a
) },
73 "read-string": func(a
[]MalType
) (MalType
, error
) {
74 return reader
.Read_str(a
[0].(string)) },
77 "<": func(a
[]MalType
) (MalType
, error
) {
78 return a
[0].(int) < a
[1].(int), nil },
79 "<=": func(a
[]MalType
) (MalType
, error
) {
80 return a
[0].(int) <= a
[1].(int), nil },
81 ">": func(a
[]MalType
) (MalType
, error
) {
82 return a
[0].(int) > a
[1].(int), nil },
83 ">=": func(a
[]MalType
) (MalType
, error
) {
84 return a
[0].(int) >= a
[1].(int), nil },
85 "+": func(a
[]MalType
) (MalType
, error
) {
86 return a
[0].(int) + a
[1].(int), nil },
87 "-": func(a
[]MalType
) (MalType
, error
) {
88 return a
[0].(int) - a
[1].(int), nil },
89 "*": func(a
[]MalType
) (MalType
, error
) {
90 return a
[0].(int) * a
[1].(int), nil },
91 "/": func(a
[]MalType
) (MalType
, error
) {
92 return a
[0].(int) / a
[1].(int), nil },
94 "list": func(a
[]MalType
) (MalType
, error
) {
95 return List
{a
}, nil },
96 "list?": func(a
[]MalType
) (MalType
, error
) {
97 return List_Q(a
[0]), nil },