Every story and comment from the Hacker News API, in a layout borrowed from 2001.
A comment on Ask HN: Have you ever needed to invert a binary tree at work?.
1> (defun invert (tree) (if (atom tree) tree (cons (invert (cdr tree)) (invert (car tree))))) invert 2> (invert '(defun invert (tree) (if (atom tree) tree (cons (invert (cdr tree)) (invert (car tree)))))) ((((nil (((nil ((nil (nil (nil . tree) . car) . invert) (nil (nil . tree) . cdr) . invert) . cons) . tree) (nil . tree) . atom) . if) nil . tree) . invert) . defun)
3> (defun invert2 (tree) (if (listp tree) [mapcar invert2 (reverse tree)] tree)) invert2
4> (invert2 '(defun invert (tree) (if (atom tree) tree (cons (invert (cdr tree)) (invert (car tree)))))) (((((tree car) invert) ((tree cdr) invert) cons) tree (tree atom) if) (tree) invert defun)
Okay, now let's crank up the stupid knob to about 7.5.
5> (defun invert3 (tree) (cond ((listp tree) [mapcar invert3 (reverse tree)]) ((symbolp tree) (intern (reverse (symbol-name tree)))) (t tree))) invert3 6> (invert3 '(defun invert (tree) (if (atom tree) tree (cons (invert (cdr tree)) (invert (car tree)))))) (((((eert rac) trevni) ((eert rdc) trevni) snoc) eert (eert mota) fi) (eert) trevni nufed)
12> (defun invert4 (tree) (let ((tree-picture (with-out-strlist-stream (s) (print tree s)))) (each ((line tree-picture)) (let* ((rl (reverse line)) (sb (mapcar (relate "()" ")(") rl))) (put-line `@{sb -78}`))))) invert4 13> (invert4 '(defun invert (tree) (if (atom tree) tree (cons (invert (cdr tree)) (invert (car tree)))))) trevni nufed) (eert mota) fi) (eert) ((eert rdc) trevni) snoc) eert (((((eert rac) trevni) nil
There are no comments on this comment yet.
Okay, now let's crank up the stupid knob to about 7.5.
and finally to 11: Look, text-wise left-right mirror image of the printed version of the tree!