[HN Gopher] Scheme Reports at Fifty
       ___________________________________________________________________
        
       Scheme Reports at Fifty
        
       Author : djwatson24
       Score  : 43 points
       Date   : 2025-10-19 14:45 UTC (8 hours ago)
        
 (HTM) web link (crumbles.blog)
 (TXT) w3m dump (crumbles.blog)
        
       | tonetheman wrote:
       | I wish I saw what these guys do in scheme. I only barely know
       | what is happening and it seems interesting.
       | 
       | The parens are so hard for me to follow and always have. I have
       | yet to find an editor that fixes that. Perhaps I did not try
       | enough or am not smart enough to acutally use the editors
       | correctly.
       | 
       | Anyway interesting read I think
        
         | hellcow wrote:
         | paredit on vim is great.
         | 
         | Working through all the exercises in "The Little Schemer" was a
         | huge help for me when getting started. You start with a few
         | primitives and build up all common tools from those with
         | recursion, like how to build an addition function using just
         | `add1` as an early example from the book.
        
           | fleahunter wrote:
           | Interesting point about the difficulty of parsing all those
           | parentheses! I remember getting pretty frustrated with it
           | when I first picked up Scheme. It felt like trying to read a
           | book written in a strange code. But then I stumbled onto
           | paredit in Emacs--it totally transformed the way I interacted
           | with the code. The structured editing made it feel more like
           | composing music than wrestling with syntax.
           | 
           | And you're right--working through "The Little Schemer" was a
           | game-changer for me too. There's something about gradually
           | building up to complex concepts that really clicks, right? I
           | wonder if there could be a way to create more beginner-
           | friendly editors that visually guide you through the syntax
           | while you code. Or even some sort of interactive tutorial
           | embedded in the editor that helps by showing expected
           | patterns in real-time.
           | 
           | The tension between users wanting features and implementers
           | wanting simplicity is so prevalent in so many languages,
           | isn't it? Makes me think about how important community
           | feedback is in shaping a language's evolution. What do you
           | all think would be a good compromise for Scheme--more
           | features or a leaner report?
        
         | neilv wrote:
         | C-like syntax:                   foo(1, 2, 3);              if
         | (x) {             aaa();         } else {             bbb();
         | }
         | 
         | Lisp-like syntax:                   (foo 1 2 3)
         | (if x             (aaa)             (bbb))
         | 
         | Syntax is easy. Practical semantics is a little bit harder, but
         | it's not hard.
         | 
         | Editor-wise, you want an editor that does automatic indenting
         | and some kind of matching parentheses highlighting. Emacs is
         | one. (Once you've learned the language, you can use a fancy
         | structural editor, but maybe don't confuse yourself with too
         | many new things at once.)
        
           | mhitza wrote:
           | For vim/neovim users out there, here's my setup https://gist.
           | github.com/mhitza/a00d7900571e9f13bac2bbf4a203d...
           | 
           | Not quite structural editing, minor annoyances, but pretty
           | decent.
        
         | bitwize wrote:
         | The "such parens, much overwhelm, so confuse" attitude of non-
         | Lispers always baffled me. Especially since when working in
         | C-syntax languages, I'm cautious enough to enforce an explicit
         | order of operations (to avoid confusion that can lead to
         | errors) that I put nearly as many parens in my C or Java code
         | as I do in my Lisp code. What's a few more pairs of round
         | brackets among friends, eh?
         | 
         | Emacs was purpose-built for working in Lisp. Out-of-the-box it
         | really helps with paren-matching by highlighting the matched
         | bracket (of any type) when you cursor over a bracket (also
         | works by highlighting the open when you type the close) and
         | providing commands for traversing and selecting whole sexps.
         | Those alone, combined with its smart indentation, will get you
         | pretty far. Add something like Paredit or Parinfer if you want
         | even more assistance with sexp manipulation.
        
           | agumonkey wrote:
           | I had a talk with someone very much allergic to lisp (a
           | college trauma for him iirc). For people like him, extra
           | distinction through syntax is a mental benefit while I assume
           | lisp fans need the opposite, removing 90% of syntax makes
           | things easier (sexps and fp composability being key too)
        
         | spit2wind wrote:
         | This is a good starter. Technically, it's Lisp and not Scheme,
         | but once you understand one, you get the other. The benefit of
         | Emacs Lisp is you can immediately play with it by modifying
         | Emacs to meet your needs.
         | 
         | https://www.gnu.org/software/emacs/manual/eintr.html
        
       | pklausler wrote:
       | I wish so badly that there were a statically typed, pure, and
       | lazy Scheme.
        
         | Chinjut wrote:
         | What would distinguish this from existing statically typed,
         | pure, and lazy functional languages such as Haskell?
        
           | maplant wrote:
           | sexpression based hygienic macros
        
         | anonnon wrote:
         | > lazy
         | 
         | Why? What are the advantages, in practice, of lazy evaluation
         | as the default?
        
           | endgame wrote:
           | If you have immutable data and want code reuse, you need
           | laziness otherwise you give up a lot of performance. In
           | Haskell, a careful choice of implementation for `sort` means
           | that `take 10 (sort someList)` will only do enough work to
           | return the first ten elements.
           | 
           | Having laziness by default means that functions compose
           | properly by default; you don't have to worry about libraries
           | providing an interface to your chosen incremental streaming
           | library or whatever. I've seen friends working in strict
           | dialects of Haskell forced to write out each combination of
           | list functions by hand because otherwise they'd have to
           | materialise large intermediate data structures where regular
           | lazy Haskell simply wouldn't.
           | 
           | Ed Kmett has a couple of great posts about the value he's
           | realised from laziness:
           | 
           | https://www.reddit.com/r/haskell/comments/l98v73/can_you_sha.
           | ..
           | 
           | https://www.reddit.com/r/haskell/comments/5xge0v/today_i_use.
           | ..
        
             | nrds wrote:
             | What works for Kmett most often does not work for mere
             | mortals.
             | 
             | As for your first point, I think it's self-defeating: You
             | claim "you don't have to worry about libraries providing an
             | interface to your chosen incremental streaming library",
             | but this requires "a careful choice of implementation" in
             | those libraries with your chosen incremental streaming
             | semantics in mind, which is the same thing but less
             | explicit! And as long as mere mortals can't figure out the
             | magic implementation of `sort` which makes incremental
             | streaming work without explicit bindings, then what's the
             | point?
             | 
             | Haskell is a great language for consuming libraries written
             | by Ed Kmett, as your link demonstrates. Otherwise, it's
             | difficult to work with.
        
         | deadthrowtrash wrote:
         | 3/4 for Shen. It's a Lisp-2 but typed, pure and lazy.
        
       | michaelcampbell wrote:
       | Tangent, but wow did I find the typography and font-face on that
       | blog post pleasant to read.
        
       ___________________________________________________________________
       (page generated 2025-10-19 23:00 UTC)