git @ Cat's Eye Technologies Robin / master eg / deadfish.robin
master

Tree @master (Download .tar.gz)

deadfish.robin @masterraw · history · blame

;''
    Deadfish ( http://esolangs.org/wiki/Deadfish ) implemented in Robin 0.8
''

(require itoa) (require bind-vals)

(reactor (line-terminal) 0
  (fexpr (args env)
    (bind-vals ((event-type event-payload) prev-state) args
      (bind state
        (if (equal? prev-state (subtract 0 1))
          0
          (if (equal? prev-state 256)
            0
            prev-state))
        (bind prompt (fexpr (args env)
            (bind show (eval env (head args))
              (bind state (eval env (head (tail args)))
                (if show
                  (list state
                        (list (literal writeln) (itoa state))
                        (list (literal write) (literal ''>> '')))
                  (list state
                        (list (literal write) (literal ''>> '')))))))
          (choose
            ((equal? event-type (literal init))
              (prompt #f state))
            ((equal? event-type (literal readln))
              (bind letter event-payload
                (choose
                  ((equal? letter (literal ''d''))
                    (prompt #f (subtract state 1)))
                  ((equal? letter (literal ''i''))
                    (prompt #f (subtract state (subtract 0 1))))
                  ((equal? letter (literal ''s''))
                    (prompt #f (multiply state state)))
                  ((equal? letter (literal ''o''))
                    (prompt #t state))
                  (else (prompt state)))))
            (else
              (list state))))))))