Tim Bradshaw
tfeb.org · Personal blog · on HN since 2007
Tim Bradshaw writes about Common Lisp, macros, Lisp machines, and old Usenet culture, along with a long-running collection of Lisp hacks.
What HN saysHN commenters link his Lisp hacks as examples of DSL-style macro tricks and his Mad people of comp.lang.lisp page for Usenet history.
20HN people shared it
8linked it in comments
20stories submitted
371story points
12 months agolast shared
2007people per year2026
Most-shared posts
- 1Lisp hacks4 people · 17 points · first shared 2009 · discussion on HN
- 2Mad people3 people · first shared 2011
- 3The lost cause of the Lisp machines2 people · 186 points · first shared 2025 · 171 comments on HN
- 4The endless droning about Common Lisp IDEs2 people · 8 points · first shared 2021 · 1 comments on HN
- 5Metatronic macros: a simple way to write hygienic macros2 people · 4 points · first shared 2022 · discussion on HN
- 6How to understand closures in Common Lisp2 people · 1 points · first shared 2023 · discussion on HN
- 7Štar: an iteration construct for Common Lisp1 people · 100 points · first shared 2024 · 35 comments on HN
- 8Vector Supercomputers1 people · 33 points · first shared 2021 · 21 comments on HN
- 9The Empty List1 people · 6 points · first shared 2022 · discussion on HN
- 10Wild Pathnames in Common Lisp1 people · 4 points · first shared 2024 · 1 comments on HN
- 11Two understandable deficiencies in Common Lisp1 people · 4 points · first shared 2022 · 1 comments on HN
- 12The Absurdity Of Stacks1 people · 3 points · first shared 2023 · discussion on HN
- 13Lisp toys1 people · 2 points · first shared 2011 · discussion on HN
- 14Two Tiny Lisp Evaluators1 people · 1 points · first shared 2023 · discussion on HN
- 15Simple Logging in Common Lisp1 people · 1 points · first shared 2022 · discussion on HN
What HN people wrote when they linked it
aerique · 2013-03-26
See cl-who for another example: http://weitz.de/cl-who/#syntax
Also, this has nothing to do with functional programming but rather with creating a DSL (http://en.wikipedia.org/wiki/Domain-specific_language)
More links:
• http://www.tfeb.org/lisp/hax.html#HTOUT
• https://github.com/franzinc/aserve/blob/master/htmlgen/test.cl
gtani · 2011-03-10
Sadly, these multiple identities are not angry enough to qualify him as a "Mad people of comp.lang.lisp"
http://www.tfeb.org/lisp/mad-people.html
gnosis · 2011-01-19
Some of the personalities who appear in that thread are mentioned in this list of "Mad people of comp.lang.lisp":
http://www.tfeb.org/lisp/mad-people.html
mahmud · 2010-06-28
A lisp with T, NIL, if, and lambda, like "tiny-lisp" here:
http://tfeb.org/lisp/hax.html#CONDUITS
Literally, a package hack with zero implementation :-)
Import defmacro and friends and you have it.
nickb · 2007-06-07
BTW, this is Tim's page on Lisp: http://www.tfeb.org/lisp/index.html
a-french-anon · 2024-11-12
Tried to contribute to a Go project a few months ago and got bitten by https://github.com/golang/go/issues/67296 due to questionable doc quality. I was pretty disappointed to find that natural sort isn't builtin since Go was the Unicode language in my mind (Go runes, made by some Plan 9 thus UTF-8 creators).
Go has a lot of good points, but I immediately felt "dirty" when using it. Like that time when I tried to wrap a closure variable over itself ("my_closure = new closure calling my_closure") and needed to use a temporary variable because closure captures are always by reference: if you want to build abstractions, you got to think them better; as it stands, this is the worst of both worlds I know (C++ makes capture type explicit and customizable, Common Lisp was designed by wizards who knew what to do cf https://www.tfeb.org/fragments/2023/02/22/how-to-understand-closures-i…
siika2000 · 2011-02-08
jimbokun · 2008-07-08
I think this is one of the failings of Common Lisp. For the example of snarfing a file into a single string, here are some examples of the fun you can have:
http://www.emmett.ca/~sabetts/slurp.html
http://www.tfeb.org/lisp/obscurities.html#SNARFING-FILES
http://www.codecodex.com/wiki/index.php?title=Read_a_file_into_a_byte_…
http://www.cl-user.net/asp/html-docs/process-file-snippset
According to the first link, this turns out to be the most efficient and most idiomatic way to do it:
(defun slurp-stream5 (stream)
(let ((seq (make-array (file-length stream) :element-type 'character :fill-pointer t)))
(setf (fill-pointer seq) (read-sequence seq stream))
seq))
Makes sense once you know what all the pieces mean, but not the first thing a new Common Lisp programmer will think of. Then, in the SNARFING-FILES link, turns out it's not correct for all files, anyway, and the "correct" version is considerably longer.
EDIT: Oops. The code I pasted DID include the proper file length check (at the cost of reading into an array of characters, instead of a string). So ignore the last sentence of my (unedited) post.