From 29bbe7678be14eae0e2f0f10dabeb4d7fe0aba81 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Fri, 19 Jun 2015 20:08:16 -0400 Subject: [PATCH] Export treap-order; add treap->empty and treap-fold. --- prospect/treap.rkt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/prospect/treap.rkt b/prospect/treap.rkt index 8a33691..b9fefb1 100644 --- a/prospect/treap.rkt +++ b/prospect/treap.rkt @@ -8,14 +8,17 @@ ;; Further, we explicitly canonicalize N instances, so eq? works to compare treaps by value. (provide treap? + treap-order treap-size treap-empty treap-empty? + treap->empty treap-insert treap-delete treap-get treap-keys treap-values + treap-fold treap-to-alist treap-has-key? @@ -63,6 +66,8 @@ (define (treap-empty? t) (zero? (treap-size t))) +(define (treap->empty t) (treap-empty (treap-order t))) + (define (default-priority key) ;; Loosely based on a restriction of murmur32 v3 (define c1 #xcc9e2d51) @@ -185,6 +190,12 @@ [(L) acc] [(N k _ _ left right) (walk left (cons k (walk right acc)))]))) +(define (treap-fold t f seed) + (let walk ((n (treap-root t)) (acc seed)) + (match n + [(L) acc] + [(N k v _ left right) (walk left (f (walk right acc) k v))]))) + (define (treap-to-alist t) (let walk ((n (treap-root t)) (acc '())) (match n