dispense with the parentheses:
(eq (mul (a a)) (pow (a 2)))
becomes eq
mul
a a
pow
a 2 (eq (mul (a a)) (pow (a 2)))
becomes eq
mul
a a
pow
a 2Our visual system has the ability to detect implied straight lines (and other simple geometric outlines) from very small clues.
Therefore "seeing" the vertical lines implied by the indentation is effortless - so it's immediately obvious which elements belong to each other.
Indentation is an incredibly valuable "brain" hack that manages to instantly communicate hierarchy, not something to be sneered at.
We have no such innate ability to match parenthesis - determining hierarchy in a jumble of open and close parenthesis requires precise counting or, typically these days, tool/editor/IDE support.
Really? How do you see the difference between "TAB" and "SPACE SPACE TAB"?
eq (mul a a)
(pow a 2)
defun min (a b)
(if (a < b) a b)
IIRC the hack to support this at read time was minimal, and it made a big impact in terms of "mainstream appeal" > eq (* 3 3) (math:pow 3 2)
▶ $true
(function definitions on the other hand uses smalltalk/ruby style blocks) eq :
mul a a
pow a 2
defun min (a b) :
if (< a b) a b
That means you can also have haskell-like continuations: seq :
eq (mul a a)
(pow a 2)
eq 4 3I should trademark this name.