> > def read2(): > expr = "" > while expr != "quit": > expr = raw_input("Lisp> ") > print parse(expr) > read2() ^^^^^^^^^^^^^^^^^ > print "Good session!" You shouldn't call read2() inside read2()... just remove that line and retry... Each time you call read2() recursively, a new expr is initialized to "", so the condition never becomes true