• by suzuki on 3/17/2019, 2:05:52 PM

    This is a small interpreter of a subset of Scheme. It implements the same language as https://github.com/nukata/little-scheme-in-python (and also its meta-circular interpreter, https://github.com/nukata/little-scheme). As a Scheme implementation, it also handles first-class continuations and runs the yin-yang puzzle correctly.

      $ cat yin-yang-puzzle.scm
      ;; The yin-yang puzzle 
      ;; cf. https://en.wikipedia.org/wiki/Call-with-current-continuation
      
      ((lambda (yin)
         ((lambda (yang)
            (yin yang))
          ((lambda (cc)
             (display '*)
             cc)
           (call/cc (lambda (c) c)))))
       ((lambda (cc)
          (newline)
          cc)
        (call/cc (lambda (c) c))))
      
      ;; => \n*\n**\n***\n****\n*****\n******\n...
      $ little-scheme-in-go yin-yang-puzzle.scm | head
      
      *
      **
      ***
      ****
      *****
      ******
      *******
      ********
      *********
      $