Top
Best
New

Posted by ska80 4/11/2025

Why I Program in Lisp(funcall.blogspot.com)
286 points | 273 commentspage 2
terminalbraid 4/11/2025|
> Other general purpose languages are more popular and ultimately can do everything that Lisp can (if Church and Turing are correct).

I find these types of comments extremely odd and I very much support lisp and lisp-likes (I'm a particular fan of clojure). I can only see adding the parenthetical qualifier as a strange bias of throwing some kind of doubt into other languages which is unwarranted considering lisp at its base is usually implemented in those "other general purpose languages".

If you can implement lisp in a particular language then that particular language can de facto do (at least!) everything lisp can do.

russellbeattie 4/11/2025||
One doesn't have to invoke Turing or Church to show all languages can do the same things.

Any code that runs on a computer (using the von Neumann architecture) boils down to just a few basic operations: Read/write data, arithmetic (add/subtract/etc.), logic (and/or/not/etc.), bit-shifting, branches and jumps. The rest is basically syntactic sugar or macros.

If your preferred programming language is a pre-compiled type-safe object oriented monster with polymorphic message passing via multi-process co-routines, or high-level interpreted purely functional archetype of computing perfection with just two reserved keywords, or even just COBOL, it's all going to break down eventually to the ops above.

Capricorn2481 4/11/2025|||
Sometimes, when people say one language can't do what another does, they aren't talking about outputs. Nobody is arguing that lisp programs can do arithmetic and others can't, they're arguing that there are ergonomics to lisp you can't approach in other languages.

But even so

> it's all going to break down eventually to the ops above.

That's not true either. Different runtimes will break down into a completely different version of the above. C is going to boil down to a different set of instructions than Ruby. That would make Ruby incapable of doing some tasks, even with a JIT. And writing performance sensitive parts in C only proves the point.

"Any language can do anything" is something we tell juniors who have decision paralysis on what to learn. That's good for them, but it's not true. I'm not going to tell a client we're going to target a microcontroller with PHP, even if someone has technically done it.

terminalbraid 4/11/2025|||
You can trivially devise a language that doesn't, though? Let's say I have a language that can return 0 and only 0. It cannot reproduce lisp.
pgwhalen 4/11/2025|||
Isn’t this just a cheeky joke? I.e. “if Einstein is right about this whole theory of relatively thing”
zachbeane 4/11/2025|||
Common Lisp at its base is usually written in Common Lisp.
terminalbraid 4/11/2025||
I'm sure you are aware there is ultimately a chicken and egg problem here. Even given the case you presented, it doesn't invalidate the point that if it can implement lisp it must be able to do everything lisp can do. In fact given lisp's simplicity, I'd be hard pressed to call a language that couldn't implement lisp "general purpose".
greydius 4/11/2025|||
"You're a very clever man, Mr. James, and that's a very good question," replied the little old lady, "but I have an answer to it. And it's this: The first turtle stands on the back of a second, far larger, turtle, who stands directly under him."

"But what does this second turtle stand on?" persisted James patiently.

To this, the little old lady crowed triumphantly,

"It's no use, Mr. James—it's turtles all the way down."

grandempire 4/11/2025|||
> I'm sure you are aware there is ultimately a chicken and egg problem here.

You should learn more about compilers. There is a really cool idea waiting for you.

varjag 4/11/2025|||
There are several Lisp implementations (including fully-fledged operating systems) which are implemented in Lisp top to bottom.
taeric 4/11/2025|||
This is conflating slightly different things, though? One is that you can build a program that does the same thing. The other is that you can do the same things with the language.

There are special forms in LISP, but that is a far cry from the amount of magic that can only be done in the compiler or at runtime for many languages out there.

thethimble 4/11/2025||
Brainfuck is also Turing complete but that isn’t an argument that it’s a good replacement for LISP or any other language.
f1shy 4/11/2025||
That has a name: Turing tarpit.
bitwize 4/11/2025|||
Yes, but sometimes doing the things Lisp can do in another language as easily and flexibly as they are done in Lisp has, as a first step, implementing Lisp in the target language.

For a famous example, see Clasp: https://github.com/clasp-developers/clasp

volemo 4/11/2025||
I believe ‘twas a joke.
0xTJ 4/11/2025||
I've never programmed in a Lisp, but I'd love to learn, it feels like one of those languages like Perl that are just good to know. I do have a job where getting better with SKILL would be useful.
dramm 4/11/2025||
Surely one of the the main reason to program in Lisp (and Haskell, and ???) is so you can write blog posts about doing so :-)

(I do really like Lisp).

submeta 4/11/2025||
> Lisp's dreaded Cambridge Polish notation is uniform and universal. I don't have to remember whether a form takes curly braces or square brackets or what the operator precedency is or some weird punctuated syntax that was invented for no good reason. It is (operator operands ...) for everything. Nothing to remember. I basically stopped noticing the parenthesis 40 years ago. I can indent how I please.

Well, that might be true for Scheme, but not for CL. There are endless forms for loops. I will never remember all of them. Or even a fraction of it. Going through Guy Steel’s CL book, I tend to think that I have a hard time remembering most of the forms, functions, and their signatures.

fithisux 4/14/2025||
"Why I Program in Lisp"

because you don't have money to waste on doctors?

curtisszmania 4/11/2025||
[dead]
prakashrj 4/12/2025||
[dead]
coolThingsFirst 4/11/2025||
[flagged]
revskill 4/11/2025||
Programming is about coordination between tasks. Prove me wrong.
whatnow37373 4/11/2025||
It doesn't have to be wrong to be irrelevant.

Many things can be viewed as coordination problems. All of life can be viewed as being about coordination between tasks.

But I want to engage in good faith and assume you have some way of making this productive. What angle are you going for?

revskill 4/11/2025||
Hm so your point is life is programming ?
whatnow37373 4/11/2025||
Isn't that obvious? :)

I do wonder what happens if one of the tasks to be coordinated is "programming"?

nocman 4/11/2025|||
that's metaprogramming :D
revskill 4/11/2025|||
No. It's deep philosophy on software design.
DeathArrow 4/11/2025|
>It's less of a big deal these days, but properly working lambda expressions were only available in Lisp until recently.

I think Haskell and ML had lambda expressions since like 1990.

imgabe 4/11/2025||
Recent, compared to Lisp
IsTom 4/11/2025||
Number of programmers that are in workforce that started before Standard ML (1983) is tiny and this argument would be relevant only to them.
mikelevins 4/11/2025||
The author of the referenced post is one of them, though.
User23 4/11/2025||
The word “properly” is not only working hard here, but perhaps pointing to deeper concepts.

In particular, it implies a coherent design around scope and extent. And, much more indirectly, it points to time. EVAL-WHEN has finally made a bit of a stir outside Lisp.

BalinKing 4/11/2025||
Does this imply that lambda expressions in Haskell and ML don't have a "coherent design around scope and extent"? This is quite a claim, to be honest....
User23 4/12/2025||
No, it doesn’t imply that. There are plenty of more popular languages that don’t though.
More comments...