And in a lisp you'd be able to mix Haskell and Prolog together, with dozens of other languages as well, seamlessly and efficiently (unlike the non-destructive Prologs people tend to embed in Haskell).
I love that both are feasible options. I’m still not sure which side of the Lisp-1 vs. Lisp-2 debate I’m on, but the fact that there are such great languages on both sides of the fence is wonderful. Also, Scheme communities are more focused; this property proved extremely important to me when I was writing a CHICKEN Scheme web app.
I agree. As sklogic showed, you can actually get the remaining attributes of LISP by building a Haskell or whatever on top of it. Doesn't have to be Common LISP or even a full LISP. Just the syntax, macros, eval, and basic compiler. One can do the rest in the other language as a DSL.
And then another language as a DSL. And another. :)
I really wish I started with lisp, the unity of the whole language teaches you that you’re not just telling a computer what to do, you’re making abstractions on top of the base language.
I think Lisp - aside from not being as low level - also is fantastic for easily creating different coding paradigms, with the advantage that code is naturally directly manipulatable.
But C or C++ can easily recreate Lisp type computation as well.
so I started learning common lisp lately. It's insane how one can combine very high level language, with down-to-metal compilation. I think that's the only language allowing it? Absolutely impressive. Feels like writing python but compiling to native
I find Lisp more than any other programming language suited to be the host language for a DSL. It is also easy to represent hierarchical and flat data formats with it.
The ability to freely mix programming paradigms and to bend the language towards the problem instead of the other way around. It's the thing that Common Lisp is kind of famous for.
Depending on the programming sub-sub-task that I'm working on right now, I can have simple state machines written with explicit GOTOs, algorithms working on immutable state and written in functional style, minor operations in these algorithms implemented with a functional shell but imperative core, the ability to do declarative programming and define my own syntax for the declarations while I'm at it, and the ability to always branch off to a task-specialized DSL whenever it brings direct benefits to the table.
reply