about summary refs log blame commit diff stats
path: root/js/games/nluqo.github.io/~bh/61a-pages/Lectures/2.4/msg.scm
blob: a82f298032f4d3d15a8dd69069828a2e22404291 (plain) (tree)



















































                                        
(define (make-regular root)
  (lambda (msg)
    (cond ((eq? msg 'fps) root)
	  ((eq? msg 'sps) root)
	  ((eq? msg 'tps) (add-s root))
	  ((eq? msg 'fpp) root)
	  ((eq? msg 'spp) root)
	  ((eq? msg 'tpp) root))))

(define (make-es root)
  (lambda (msg)
    (cond ((eq? msg 'fps) root)
	  ((eq? msg 'sps) root)
	  ((eq? msg 'tps) (add-es root))
	  ((eq? msg 'fpp) root)
	  ((eq? msg 'spp) root)
	  ((eq? msg 'tpp) root))))

(define (make-irreg fp sp tp)
  (lambda (msg)
    (cond ((eq? msg 'fps) fp)
	  ((eq? msg 'sps) sp)
	  ((eq? msg 'tps) tp)
	  ((eq? msg 'fpp) sp)
	  ((eq? msg 'spp) sp)
	  ((eq? msg 'tpp) sp))))

(define (operate op obj)
  (obj op))

(define (fps obj) (operate 'fps obj))
(define (sps obj) (operate 'sps obj))
(define (tps obj) (operate 'tps obj))
(define (fpp obj) (operate 'fpp obj))
(define (spp obj) (operate 'spp obj))
(define (tpp obj) (operate 'tpp obj))


(define (add-s wd)
  (word wd 's))

(define (add-es wd)
  (word wd 'es))

(define eat (make-regular 'eat))
(define drink (make-regular 'drink))
(define go (make-es 'go))
(define box (make-es 'box))
(define be (make-irreg 'am 'are 'is))