When people encounter Lisp syntax for the first time
When people encounter Lisp syntax for the first time
When people encounter Lisp syntax for the first time
Where does that notation work?
Lisp uses it, with the fun extra part that operators are just normal functions - so instead of foo(bar)
you get (foo bar)
, or for operators 1+1+2
becomes (+ 1 1 2)
. It’s a really fun language even just for being different than most, I def recommend playing around with it if you’re looking for something new.
The fun part comes from using it without syntax highlighting, so you can regularly play „find the missing paranthesis“.
The most interesting part about Lisp is homoiconicity:
(+ 1 1 2) is literally a list with symbol "+" and 3 numbers.
Which allows to build the most powerful macro possible, manipulating code (with data as a tree-like structures) and changing it into whatever else at compile time.
Now if only there was any good use for macros, this would be the best language 🙃
(f x)
works this way in Lisp - as in the joke - and Lisp descendants like Scheme. And then there's Haskell which takes the whole thing a step further still.
Also Perl, because Larry thought it would be fun(ctional). The external parentheses are technically optional in this case, but won't break anything if included. Regular f(x)
syntax is also supported there. (You could probably remake this meme with Python and Perl in first and second panels tbh.)
And I know of at least one dialect of BASIC that allowed subroutine calls to lack their parentheses, so the same external parentheses thing would apply if that subroutine was a function.
And then there’s Haskell which takes the whole thing a step further still.
Wait, what works in Haskell that doesn't in Lisp, exactly? Are the spaces not just function composition?
of at least one dialect of BASIC that allowed subroutine calls to lack their parentheses
Did sub calls normally have parentheses in BASIC?
In c style languages, Java, c++, rust, etc.
Does that make Lisp a language with significant white space?
yeah, the same way you can't structuser {...}
There has to be something to split the identifiers
What about the M-expression version (f[x])?
AFAIK, the only language that ever implemented M-expressions was Logo.
WDYM "the 1st time"?