Comment by qsort
4 years ago
Agreed, there's something special about LISPs I can't quite put my finger on. Which is kind of funny, because I've never used any lisp professionally and I don't think there are very many use cases I'd use one for.
Maybe SICP is just an unreasonably excellent book?
To me, the specialness of LISPs comes from the uniformity of the syntax (which in turn makes code easier to understand and reason about). This is probably highly subjective!
That said, SICP is unreasonably excellent :)
I've enjoyed messing around with Lisp, but for me the uniformity of the syntax makes it harder to reason about - everything looks the same, big blobs of parenthesis.
That's part of its appeal, but also a big part of its downfall I think - other languages can utilize a wider "Ascii spectrum" and represent different things in lexically different ways, making it easier to distinguish at a glance.
I think this makes sense. Double-edged swords make for powerful tools.
I like to think you can make a DSL for any situation, but it's not like I've actually done that in practice hah.
Just adding on to this thread as a fairly new lisp enthusiast. I picked up SICP during the pandemic and have really fallen in the lisp rabbit hole and it has been super fun.
I’ve mostly been toying with scheme (guile) and a bit of clojure.
Keep going! Clojure is a joy. Strong thinkers in the community!
The syntax for me is a drag on the language. Make me spend more than a 2 seconds trying to untangle parameters from function name and you lost me.
What I think made the language special is its level of abstractness. Unless I am mistaken, it is the first language where you could manipulate function as a first-class citizen. This and the ability to use closure. 60 years ago, it was really innovative.
Now, javascript does it...
Definitely first-order functions made LISP powerful compared to its contemporaries-- but also you can't mention abstraction without mentioning macros. Macros are first-class metaprogramming, and very much enabled by the uniformity of s-expressions.
That said, people can do awesome stuff with any language, so all this is very subjective IMO.
The function name is the first item; the parameters are the others: (fun x y z).
Some Lisp dialects separate the two further in definitions:
The Scheme style is "definition follows use": the definition looks like the call:
Now if the function name above were actually y and not fun, I'd have to spend more than two seconds separating it from the arguments fun, x and z.