From 70ea599b6e0787102f12cd543dcd65a2eb3751d5 Mon Sep 17 00:00:00 2001 From: Joel Martin Date: Sat, 4 Oct 2014 21:49:26 -0500 Subject: go: step1_read_print print working. --- go/src/printer/printer.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 go/src/printer/printer.go (limited to 'go/src/printer') 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 "" +} -- cgit v1.2.3