this post was submitted on 19 Jul 2023
1094 points (98.3% liked)

Programmer Humor

32570 readers
142 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 10 points 1 year ago (1 children)

I loved learning lambda calculus (though for me it was super hard)

[–] [email protected] 3 points 1 year ago (3 children)

I never really understood the point of Lambda calculus. Why have an anonymous function? I thought it was good practice to meticulously segment code into functions and subroutines and call them as needed, rather than have some psuedo-function embedded somewhere.

[–] [email protected] 3 points 1 year ago

I think you're confusing lambdas with lambda calculus. Lambda calculus is more than just anonymous functions.

To put it extremely simply, let's just say functional programming (the implementation of lambda calculus) is code with functions as data and without shared mutable state (or side effects).

The first one increases expressiveness tremendously, the second one increases safety and optimization. Of course, you don't need to write anonymous functions in a functional language if you don't want to.

As for why those "pseudo-functions" are useful, you're probably thinking of closures, which capture state from the context they are defined in. That is pretty useful. But it's not the whole reason lambda calculus exists.

[–] [email protected] 2 points 1 year ago

I suppose it has to do with being stateless.

I just loved learning about lambda calculus.

I think the idea is to remove complexity by never dealing with state, so you just have one long reduction till you get to the final state...

But someone who's more into lambdas etc should speak about this and not me (a weirdo)

[–] [email protected] 2 points 1 year ago

See the other comments about lambdas vs. lambda calculus, but lambdas are supposed to be for incredibly simple tasks that don't need a full function definition, things that could be done in a line or two, like simple comparisons or calling another function. This is most useful for abstractions like list filtering, mapping, folding/reducing, etc. where you usually don't need a very advanced function call.

I was always taught in classes that if your lambda needs more than just the return statement, it should probably be its own function.