(Sorry that this retreads past threads … but it’s a topic that easily could have different answers over time.)<p>I’m working on a blog post titled “which lisp” (lower case) and am soliciting responses to hopefully include in full within the post.<p>What do I mean by “a lisp”?<p>I means a lispy language.<p>1. S-expressions on the surface (not as a substrate or implementation detail)
2. Homoiconicity
3. Fully specified across implementations at the level of day to day use<p>Decision points
In no particular order, here are some questions I think are relevant.<p>- Practicality for everyday to day generic scripting
- Practicality for Web apps
- Practicality for data analysis / munging tasks
- Language ergonomics
- Special sauce<p>What about Schemes?<p>For these purposes, each Scheme is considered a different “lisp” since in common use so many non-trivial packages/libraries/projects target a specific Scheme. Ease of learning/using other Schemes can be considered part of the special sauce, though.<p>What about Common Lisp?<p>While different CL implementations have special features, CL is fully specified and few significant packages/libraries function only on a single implementation.<p>What about lisp-over-another-runtime?<p>As long as the surface language has S-expressions and is homoiconic … it’s “a lisp” for these purposes.
Given CL and Guile (never heard of Janet), with a focus on practicality, I suggest CL.<p>I go into more detail in the posts I linked. While a few months old they still hold up.<p><a href="https://port19.xyz/tech/other-lisps/" rel="nofollow">https://port19.xyz/tech/other-lisps/</a>
<a href="https://port19.xyz/tech/clojure/" rel="nofollow">https://port19.xyz/tech/clojure/</a><p>I suggest you be careful with non-repl-based lisps. Noone I talked to in Racket circles seriously uses the repl superpowers you'll get used to in CL, Clojure or Guile.<p>Beyond the beauties of homoiconicity, that repl workflow, programming at runtime, has been my favourite part
I use Racket. It has a lot of standard libraries and also packages that you can download.<p>Using only the standard librares I made a few projects:<p>* Open a GUI to select a file, untargzip it, parse one of the expanded files with xlm, edit the xml and targzip everything again. (This is a common pattern. Now many applications save the data as a xml compressed with tar and gzip.) I made an executable and send it to my coworkers so they can just run it.<p>* A bot to reply emails, with IMAP and SMPT. It reads the email, scrap some data from one of my webpages and send it in the reply. the bot can only only handle the easy questions, but in my case it's like the 90% so it it saves me a lot of time.<p>* I used the webserver so the T.A. in my part of the university can fill their preferences about the courses they want to teach. It handles like 500 users in an old computer without problems.
A little more context… This is a real decision I’m making with Common Lisp, Guile and Janet as my current leading options.<p>But … I feel like documenting all the thoughts in an essay/blog form may be helpful to others.<p>(And my post history will show I’ve gone down this path before. Trying again. Since last time I gave up due to the paradox of choice.)