Ask HN: Is there an easy example of a Lisp pretty-printer?
I'm working on a pretty printer for my own (toy) Lisp and it's harder than I thought. I've been looking for easy to understand example code, a pretty printer in Scheme or Lisp that I could adapt and extend but so far have only found academic overview papers from the 80s. It doesn't help that most of the stuff is for CommonLisp and uses format. I don't have any special string formatting directives and my Lisp is rather different from CL, more akin to XLisp.
Do any gray-bearded Lisp programmers remember some old Lisp or Scheme example code that I could study?
8 comments
[ 3.5 ms ] story [ 33.9 ms ] threadBut that's not the problem, I have troubles dealing with line-breaks. They are currently not intelligent enough, e.g. a list may break directly after an opening parenthesis even if the whole list would fit on the next line + indentation. It seems that a good pretty printer needs to look ahead?
Anyway, looking for a simple clean example. Just a function recursing into a list and formatting it as code with a fixed margin and without using any fancy formatting instructions would be very instructive.
[0] https://homepages.inf.ed.ac.uk/wadler/papers/prettier/pretti...
[1] https://github.com/Marwes/pretty.rs
Here is an article on a pretty printer written in Pico Lisp: https://picolisp.com/wiki/?prettyPrint
I attempted to also include all the helper functions which are not standard lisp manually.
print and println put a space between arguments when printing prin and prinl do not. The ones with an l do line breaks, the others not.
pretty prints it's first argument and the second number is an optional argument what level of indentation to start with.