#!/usr/bin/env sh
# -*- wisp -*-
guile -L $(dirname $(dirname $(realpath "$0"))) -c '(import (language wisp spec))'
exec guile -L $(dirname $(dirname $(realpath "$0"))) --language=wisp -s "$0" "$@"
; !#

;;; coffee --- pseudo-code for work with coffee, based on flawed java-code on a cup

import : ice-9 q
         ice-9 pretty-print

define-syntax-rule : sip x
  set! x #f
define-syntax-rule : pop x
  let : : y : car x
    set! x : cdr x
    . y

define* : work schedule
    let*
      : pot : prepare 'coffee
        cup : serve pot
      let proceed : : task : pop schedule
          sip cup
          execute task
          when : not : done? schedule
              when : empty? cup
                  when : empty? pot
                      set! pot : prepare 'coffee
                  set! cup : serve pot
              proceed : pop schedule

define prepare list
define serve car
define execute pretty-print
define done? null?
define : empty? x
    equal? #f x
define schedule : iota 5

work schedule