Navigation Name Recipes/Languages/Lisra/Pretty Synopsis A Lisp pretty printer. Description The purpose of a pretty printer is to convert an internal structure to text. We define here the simplest possible solution: ```module demo::lang::Lisra::Pretty import demo::lang::Lisra::Runtime; // Pretty print: transform an Lval to a string public str pretty(Integer(n)) = ""; public str pretty(Atom(name)) = name; public str pretty(List(elms*)) = "( <}>)"; public str pretty(Closure(Result(list[Lval] args, Env env))) = "Closure()"; ``` Compare the definition of `pretty` with that of `parse`: ```Lval parse(str txt); str pretty(Lval x); ``` For a well-designed pair of `parse`/`pretty` functions, the latter is the inverse of the former. In other words, for every `L` the following should hold: ```parse(pretty(L)) == L ``` Examples ```rascal>import demo::lang::Lisra::Runtime; ok rascal>import demo::lang::Lisra::Pretty; ok rascal>pretty(Integer(42)); str: "42" rascal>pretty(Atom("x")); str: "x" rascal>L = List([Atom("+"), Integer(5), Integer(7)]); Lval: List([ Atom("+"), Integer(5), Integer(7) ]) rascal>pretty(L); str: "( + 5 7 )" ``` Now let's explore whether `pretty` is indeed the inverse of `parse`: ```rascal>import demo::lang::Lisra::Parse; ok rascal>parse(pretty(L)) == L; bool: true ```  | [New Subconcept] | [Recompile Course] | [Warnings] Is this page unclear, or have you spotted an error? Please add a comment below and help us to improve it. For all other questions and remarks, visit ask.rascal-mpl.org.