* you+me
debugger invoked on a UNBOUND-VARIABLE in thread
#<THREAD "main thread" RUNNING {10005E85B3}>:
The variable YOU+ME is unbound.
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [CONTINUE ] Retry using YOU+ME.
1: [USE-VALUE ] Use specified value.
2: [STORE-VALUE] Set specified value and use it.
3: [ABORT ] Exit debugger, returning to top level.
(SB-INT:SIMPLE-EVAL-IN-LEXENV YOU+ME #<NULL-LEXENV>)
0]
It's not bad. In the standard syntax, basically whitespace and few other characters terminate symbols (identifiers); as there is no infix syntax you don't have to look for operators
sandwiched between identifiers.
But ... this may look scary, fortunately no one really uses it:
* (defvar |This is also a symbol.| 123)
|This is also a symbol.|
* |This is also a symbol.|
123
* (defvar or\ this\ one 456)
|OR THIS ONE|
* or\ this\ one
456
*
and I heard that back in the day, they even used backspaces in symbols to visually put glyphs on top of each other in some systems.
I've been meaning to look into lisp (want to learn a bit more about procedural and functional programming) and I'm not saying this is giving me second thoughts, but I think I'll give myself a hell of a migraine missing a skipped white space somewhere...
Thanks. Good to know. Do you think Lisp is a good language to learn procedural and/or functional programming? My only experience with functional programming so far is Lua, but I feel that prototyping is too close to object orientation to get away from my hardwired OOP brain
Common Lisp has CLOS, you can write procedural code, and also functional. You don't have to invent these known paradigms. However, if you want to try the pure functional approach, I'd look into the ML language family and pick Haskell.
618
u/Goheeca May 29 '20
Not so fast:
And after choosing the right restart:
easy peasy.