Как написать собственный симпатичный принтер - PullRequest
10 голосов
/ 29 апреля 2009

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

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

1 Ответ

14 голосов
/ 29 апреля 2009

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

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

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

до:

89
 +- 9
 +- 456

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

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

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

...