Clojure Zippers (2021)

(grishaev.me)

81 points | by prydt 2 days ago ago

4 comments

  • ngruhn 2 hours ago

    I'm not sure if I get it. But I don't know Clojure syntax too well. Say I want to represent a slideshow state. I could do it with

        { 
          slides: List<Slide>, 
          current_index: Int
        }
    
    Or alternatively:

        {
          left_slides: List<Slide>,
          current: Slide,
          right_slides: List<Slide>
        }
    
    Is it fair to call the latter a Zipper?
    • shakadak an hour ago

      Yes, although it's usually defined as:

          {
            slides_shown: List<Slide>,
            slides_left: List<Slide>
          }
      
      Where the head of slides_left is the current slide. Pretty much any recursive data structure can be derived into a zipper.
    • laszlokorte 2 hours ago

      Yes if List is immutable and the interface for stepping through the slides ist designed accordingly

  • 0_gravitas a day ago

    I've been using Clojure for a few years now and zippers have always been a blindspot (had no idea even _when_ they would be useful), this is a remarkable tutorial!