this post was submitted on 02 Oct 2023
865 points (98.7% liked)

Programmer Humor

19187 readers
1182 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

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

Before studying CS, I recognized it as 'the bioware puzzle'. They were probably copying their own scribbles fron back then.

Haskell was the hardest, but it looked the most beautiful.

[–] [email protected] 33 points 11 months ago (3 children)

Haskell was the hardest, but it looked the most beautiful.

That pretty much sums that language up

[–] [email protected] 9 points 11 months ago (1 children)

In order to write a haskell program, you must first write the corresponding haskell program.

[–] [email protected] 3 points 11 months ago

And in order to do that, you have to imagine sisyphus happy

[–] [email protected] 8 points 11 months ago (1 children)

Strange. I find the language hideous, most likely because it resembles math, or maybe because I'm already used to the C-like syntax.

[–] [email protected] 15 points 11 months ago (1 children)

Haskell is beautiful because it resembles math

[–] [email protected] 14 points 11 months ago

It's also beautiful because it doesn't have C-like syntax.

[–] [email protected] 4 points 11 months ago (1 children)

Functional programming flips your brain around backwards, but shader programming will turn it inside-out.

[–] [email protected] 4 points 11 months ago

For more brain flipping try looking into hardware description languages (Verilog) or proof assistants (Coq).

[–] [email protected] 10 points 11 months ago (1 children)
hanoi :: Integer -> a -> a -> a -> [(a, a)]
hanoi 0 _ _ _ = []
hanoi n a b c = hanoi (n-1) a c b ++ [(a, b)] ++ hanoi (n-1) c b a

From here: https://www.rosettacode.org/wiki/Towers_of_Hanoi#Haskell

[–] [email protected] 12 points 11 months ago* (last edited 11 months ago) (1 children)

Edit: I understand it now. That first line is just a really weird way to define a function.

[–] [email protected] 5 points 11 months ago

Welp, imma try myself at an explanation. Mostly cause I haven't written Haskell in a while either.

So, that first line:

hanoi :: Integer -> a -> a -> a -> [(a, a)]

...actually only declares the function's type.

In this case, it's a function that takes an Integer and three values of a generic type a and then returns a list of tuples of those same as.
So, those as are just any types representing the towers. Could be strings, integers, custom data types, whatever. The returned tuples represent movements between towers.

Following that are actually two definitions of the function.

The first definition:

hanoi 0 _ _ _ = []

...is the recursion base case. Function definitions are applied, whenever they match, being evaluated top-to-bottom.

This line specifies that it only matches, if that first Integer is 0. It does not care what the remaining parameters are, so matches them with a wildcard _.
Well, and to the right side of the equals sign, you've got the return value for the base case, an empty list.

Then comes the more interesting line, the recursion step:

hanoi n a b c = hanoi (n-1) a c b ++ [(a, b)] ++ hanoi (n-1) c b a

This line matches for any remaining case. Those small letter names are again wildcards, but the matched value is placed into a variable with the provided name.

And then, well, it recursively calls itself, and those ++ are list concations. This line's only real complexity is the usual Tower Of Hanoi algorithm.