trie-step-wild
This commit is contained in:
parent
852e93328f
commit
5f621b098e
|
@ -53,6 +53,7 @@
|
||||||
;; trie-prune-branch
|
;; trie-prune-branch
|
||||||
trie-step
|
trie-step
|
||||||
trie-step*
|
trie-step*
|
||||||
|
trie-step-wild
|
||||||
|
|
||||||
projection->pattern
|
projection->pattern
|
||||||
instantiate-projection
|
instantiate-projection
|
||||||
|
@ -678,6 +679,29 @@
|
||||||
(define (trie-step* t keys)
|
(define (trie-step* t keys)
|
||||||
(foldl (lambda (key t) (trie-step t key)) t keys))
|
(foldl (lambda (key t) (trie-step t key)) t keys))
|
||||||
|
|
||||||
|
;; Trie -> Trie
|
||||||
|
(define (trie-step-wild t)
|
||||||
|
;; Trie Natural -> Trie
|
||||||
|
(define (walk t n)
|
||||||
|
(match* (t n)
|
||||||
|
[(_ 0) t]
|
||||||
|
[((branch os w rs) _)
|
||||||
|
(define n-1 (sub1 n))
|
||||||
|
(define w-k (walk w n-1))
|
||||||
|
(define o-ks
|
||||||
|
(for/fold ([acc w-k])
|
||||||
|
([entry (treap-to-alist os)])
|
||||||
|
(match-define (cons (open-parenthesis arity _) k) entry)
|
||||||
|
(trie-union acc (walk (walk k arity) n-1))))
|
||||||
|
(for/fold ([acc o-ks])
|
||||||
|
([entry (treap-to-alist rs)])
|
||||||
|
(match-define (cons _ k) entry)
|
||||||
|
(trie-union acc (walk k n-1)))]
|
||||||
|
[(_ _)
|
||||||
|
trie-empty]))
|
||||||
|
|
||||||
|
(walk t 1))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Projection
|
;; Projection
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue