[HN Gopher] Haskell, Reverse Polish Notation, and Parsing
___________________________________________________________________
Haskell, Reverse Polish Notation, and Parsing
Author : mw_1
Score : 32 points
Date : 2025-07-02 15:07 UTC (3 days ago)
(HTM) web link (mattwills.bearblog.dev)
(TXT) w3m dump (mattwills.bearblog.dev)
| jacksonslipock wrote:
| Made me feel like I understand monads finally...will read again
| in a couple days when I inevitably forget.
| kibwen wrote:
| Agreed that RPN (and stack machines) are beautiful and
| underappreciated. Unfortunately, it's for a relevant reason that
| I have to push back against the author's newfound love of
| recursion. Like everyone else I had the same brain-exploding
| moment when I realized that recursion was possible and how if
| forced me to re-think what functions were capable of, but now
| that I'm old and ornery I'm of the Hot Take that recursion is a
| clumsy alternative to a loop, not the other way around. Which is
| to say, if a portion of a program is going to threaten to execute
| for an unbounded amount of time, I want that fact to be
| explicitly called out in the code via a looping construct, rather
| than having to worry whether any random function call is going to
| recur (or even mutually recur), to say nothing of the efficiency
| of holding onto a single piece of loop-relevant mutable state
| rather than forcing my runtime to handle an unbounded number of
| stack frames. If your language both _guarantees_ tail recursion
| and calls it out syntactically, then you get a pass, otherwise I
| 'd be perfectly happy working in languages that didn't support
| recursion at all.
| Jaxan wrote:
| If I have to traverse a tree, then recursion is more natural to
| me. With a loop you'll have to manually use a stack (it's fine,
| but more error prone). For lists, I rarely write loops or
| recursion. It's mostly folds and maps.
| odyssey7 wrote:
| Linear recursion vs tree recursion.
| agumonkey wrote:
| I don't know man, very often sophisticated problems require
| recursive thinking (even if you don't write it so later on) to
| be able to see similarities in sub problems. Just last week I
| had to resort to this to flatten-index json files. I started
| confused and then made an inductive leap and the solution
| unfolded itself (no pun intented) as a two-liner.
|
| It's way beyond brain-teaser for me, it's the sharpest tool I
| know of.
| odyssey7 wrote:
| Recursion isn't about writing functions, it's the foundation of
| scalable systems.
|
| Deep learning with backpropagation? That's the chain rule of
| calculus applied recursively over a network, as described by
| Rumelhart, Hinton, and Williams. We owe LLMs and emerging AI to
| recursive ideas.
|
| The internet? It's a recursive structure made up of an
| arbitrary number of interconnected servers. We owe the
| information era to recursion.
|
| Database queries and programming languages? We prove
| correctness by reasoning recursively. We architect entire
| systems of arbitrary size, with correct behavior, simply by
| specifying the properties of their element types.
|
| Sure, you could probably block recursion within the scope of a
| program's compilation. But when you're developing scalable
| systems, recursion is their natural language. The powerful
| recursive algorithms for these systems are symptoms of their
| scalability, not mere implementation choices. When forced,
| stacks and other recursion workarounds are obstacles that get
| in the way of innovation.
|
| Plus, real-world systems aren't single programs compiled
| together. When microservice A calls microservice B, there's
| potential for recursion, regardless of whether the programming
| language of either microservice supports it. Programmers still
| have to think recursively. No programming language annotation
| is going to change that.
|
| The Great Pyramid contains a combinatorial explosion of smaller
| pyramids inside it. They made it out of blocks. Forty centuries
| look down upon us.
___________________________________________________________________
(page generated 2025-07-05 23:00 UTC)