aboutsummaryrefslogtreecommitdiff
path: root/model.cpp
diff options
context:
space:
mode:
authorTeddy <ted.sybil@gmail.com>2013-08-05 09:41:19 +0800
committerTeddy <ted.sybil@gmail.com>2013-08-05 09:41:19 +0800
commitc54fefd17fb54029bbb62c363197c808b0fecc6b (patch)
treedeaaa87177698b093fd45dc1ff12955b1abbe678 /model.cpp
parent645549b8a42844fc5a8042a4808c8ebf5050d7da (diff)
added list support
Diffstat (limited to 'model.cpp')
-rw-r--r--model.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/model.cpp b/model.cpp
index fab17d6..83d5b79 100644
--- a/model.cpp
+++ b/model.cpp
@@ -55,7 +55,16 @@ Cons::Cons(EvalObj *_car, EvalObj *_cdr) :
next(NULL) {}
string Cons::ext_repr() {
- return "(" + car->ext_repr() + " . " + cdr->ext_repr() + ")";
+ string res = "(";
+ EvalObj *ptr = this;
+ for (;ptr != empty_list && ptr->is_cons_obj();
+ ptr = TO_CONS(ptr)->cdr)
+ res += TO_CONS(ptr)->car->ext_repr() + " ";
+ if (ptr == empty_list)
+ res[res.length() - 1] = ')';
+ else
+ res += ". " + ptr->ext_repr() + ")";
+ return res;
}
#ifdef DEBUG