Some followup from my previous post on Lisp…
— Lisp Resources —
The book "Practical Common Lisp" is available online, published by the author in its entirety.
Also, a CS professor Slava Akhmechet wrote an essay in the same vein, translating from C++ to Lisp — via Xml of all things.
(In full disclosure, I’ve *never* seen the light of Xml, and verbally abuse it at every opportunity even if only in a hush tone. It’s like a reflex. But more people these days are familiar with Xml trees, and the essay is well written).
— Lisp Style —
Also, I’ve noticed I’ve gotten Lisp style wrong slightly. It is also common to indent to align with the name of the function or language construct being invoked. This might look like:
(defun fib (n) (if (< n 2) 1 (+ (fib (- x 1)) (fib (- x 2)))))
Note the left paren aligning bellow to the right of ‘defun’, and ‘1’ aligning to the right of ‘if’. The lesser indent for the ‘+’ operation is used to distinguish the ‘else’ clause for the programmer.
Don’t align incorrectly:
; this code lies! the programmer incorrectly ; aligned 'do-something', which is part of the ; addition expresion (if (xyz 1 (* 2 3) (do-something)) (something-else))
; much better. now it's clear that 'do-something' ; is part of the condition expression (if (xyz 1 (* 2 3) (do-something)) (something-else))
There’s even a Lisp plugin for SlickEdit (my code editor of choice) that will automatically adjust the indent for you, as well as add other editor support, and I hear that Emacs has equally great Lisp editing support.