;; A Queue is one of ;; - '() ;; - (cons SchemeValue Queue) ;; ;; interpretation: ;; - the empty list is an empty queue ;; - a non-empty list L is a queue whose head is (car L) and ;; whose tail is (cdr L) ;; empty : -> Queue (define empty (lambda () '())) ;; snoc : Queue SchemeValue -> Queue (define snoc (lambda (q v) ; [[ The body could also be written as (append q (list v)) ]] (cond ((null? q) (cons v '())) (else (cons (car q) (snoc (cdr q) v)))))) ;; isEmpty: Queue -> Boolean (define isEmpty (lambda (q) (null? q))) ;; head : Queue -> SchemeValue (define head (lambda (q) (car q))) ;; tail : Queue -> Queue (define tail (lambda (q) (cdr q)))