2014-08-06 19:16:50 +00:00
|
|
|
#lang racket/base
|
2013-03-29 03:00:29 +00:00
|
|
|
|
2014-08-06 19:16:50 +00:00
|
|
|
(provide empty-quasiqueue
|
2013-03-29 03:00:29 +00:00
|
|
|
quasiqueue-empty?
|
|
|
|
quasiqueue-append-list
|
|
|
|
quasiqueue-append
|
|
|
|
quasiqueue
|
|
|
|
list->quasiqueue
|
|
|
|
quasiqueue->list
|
|
|
|
quasiqueue->cons-tree)
|
|
|
|
|
|
|
|
;; A QuasiQueue<X> is a list of Xs in *reversed* order.
|
2014-08-06 19:16:50 +00:00
|
|
|
;; (define-type (QuasiQueue X) (Listof X))
|
2013-03-29 03:00:29 +00:00
|
|
|
|
2014-08-06 19:16:50 +00:00
|
|
|
;; (define-type (Constreeof X) (Rec CT (U X (Pairof CT CT) False Void Null)))
|
2013-03-29 03:00:29 +00:00
|
|
|
|
2014-08-06 19:16:50 +00:00
|
|
|
;; empty-quasiqueue : (All (X) -> (QuasiQueue X))
|
2013-03-29 03:00:29 +00:00
|
|
|
(define (empty-quasiqueue) '())
|
|
|
|
|
2014-08-06 19:16:50 +00:00
|
|
|
;; quasiqueue-empty? : (All (X) (QuasiQueue X) -> Boolean)
|
2013-03-29 03:00:29 +00:00
|
|
|
(define (quasiqueue-empty? q) (null? q))
|
|
|
|
|
2014-08-06 19:16:50 +00:00
|
|
|
;; quasiqueue-append-list : (All (X) (QuasiQueue X) (Listof X) -> (QuasiQueue X))
|
2013-03-29 03:00:29 +00:00
|
|
|
(define (quasiqueue-append-list q xs)
|
|
|
|
(append (reverse xs) q))
|
|
|
|
|
2014-08-06 19:16:50 +00:00
|
|
|
;; quasiqueue-append : (All (X) (QuasiQueue X) (QuasiQueue X) -> (QuasiQueue X))
|
2013-03-29 03:00:29 +00:00
|
|
|
(define (quasiqueue-append q1 q2)
|
|
|
|
(append q2 q1))
|
|
|
|
|
2014-08-06 19:16:50 +00:00
|
|
|
;; quasiqueue : (All (X) X * -> (QuasiQueue X))
|
2013-03-29 03:00:29 +00:00
|
|
|
(define (quasiqueue . xs)
|
|
|
|
(reverse xs))
|
|
|
|
|
2014-08-06 19:16:50 +00:00
|
|
|
;; list->quasiqueue : (All (X) (Listof X) -> (QuasiQueue X))
|
2013-03-29 03:00:29 +00:00
|
|
|
(define (list->quasiqueue xs)
|
|
|
|
(reverse xs))
|
|
|
|
|
2014-08-06 19:16:50 +00:00
|
|
|
;; quasiqueue->list : (All (X) (QuasiQueue X) -> (Listof X))
|
2013-03-29 03:00:29 +00:00
|
|
|
(define (quasiqueue->list q)
|
|
|
|
(reverse q))
|
|
|
|
|
2014-08-06 19:16:50 +00:00
|
|
|
;; quasiqueue->cons-tree : (All (X) (QuasiQueue X) -> (Constreeof X))
|
2013-03-29 03:00:29 +00:00
|
|
|
(define (quasiqueue->cons-tree q)
|
2014-08-06 19:16:50 +00:00
|
|
|
(reverse q))
|