aboutsummaryrefslogtreecommitdiff
path: root/go/src/printer/printer.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/src/printer/printer.go')
-rw-r--r--go/src/printer/printer.go35
1 files changed, 35 insertions, 0 deletions
diff --git a/go/src/printer/printer.go b/go/src/printer/printer.go
new file mode 100644
index 0000000..83d4c84
--- /dev/null
+++ b/go/src/printer/printer.go
@@ -0,0 +1,35 @@
+package printer
+
+import (
+ "fmt"
+ "strings"
+)
+
+import (
+ "types"
+)
+
+func Pr_str(obj types.MalType, print_readably bool) string {
+ switch tobj := obj.(type) {
+ case types.List:
+ str_list := make([]string, 0, len(tobj.Val))
+ for _, e := range tobj.Val {
+ str_list = append(str_list, Pr_str(e, print_readably))
+ }
+ return "(" + strings.Join(str_list, " ") + ")"
+ case string:
+ if print_readably {
+ // TODO: quote backslash, quote, and newline
+ return `"` + fmt.Sprintf("%v", obj) + `"`
+ } else {
+ return fmt.Sprintf("%v", obj)
+ }
+ case types.Symbol:
+ return tobj.Val
+ case nil:
+ return "nil"
+ default:
+ return fmt.Sprintf("%v", obj)
+ }
+ return "<printed>"
+}