[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)