Как написать собственный симпатичный принтер

Проблема, которая часто возникала в моей карьере, заключается в том, что у меня есть некоторая структура данных (возможно, s-выражение), и я хочу напечатать ее в понятной для человека форме с разумными выборами отступа.

Есть ли книга или запись в блоге, в которой описывается, как сделать это элегантно? Меня интересует алгоритм больше, чем конкретная библиотека.

Ответ 1

S-Exps эквивалентны древовидным структурам, если вы можете красиво напечатать дерево, вы можете довольно хорошо напечатать s-exp.

Например, сравните:

(tree
    (value 89)
    (tree
        (value 9)
        nil
        nil)
    (tree
        (value 456)
        nil
        nil))

в

89
 +- 9
 +- 456

Алгоритм идентичен, единственное различие - это количество окружающих данных, которые вы хотите распечатать.

В этой статье описан алгоритм для красивой печати деревьев

Этот описывает красивый принтер для языков программирования