# HG changeset patch # User Steve Losh # Date 1496157222 0 # Node ID fc378d24dd2f205c51b57cf315a58d18b3928b25 # Parent 490f2915466fd88a80a2fd69a1fb8bf0ab66731e Make zdd union a bit cleaner diff -r 490f2915466f -r fc378d24dd2f src/zdd.lisp --- a/src/zdd.lisp Thu May 25 15:49:38 2017 +0000 +++ b/src/zdd.lisp Tue May 30 15:13:42 2017 +0000 @@ -118,19 +118,24 @@ (defun-ematch* zdd-union% (a b) - (((node) (sink)) (zdd-union% b a)) + ((a (sink nil)) a) + (((sink nil) b) b) - (((sink nil) b) b) + ((a (sink t)) (unit-patch a)) (((sink t) b) (unit-patch b)) (((node var-a hi-a lo-a) (node var-b hi-b lo-b)) (cond - ((< var-a var-b) (zdd-node var-a hi-a (zdd-union% lo-a b))) - ((> var-a var-b) (zdd-node var-b hi-b (zdd-union% lo-b a))) - ((= var-a var-b) (zdd-node var-a - (zdd-union% hi-a hi-b) - (zdd-union% lo-a lo-b)))))) + ((< var-a var-b) + (zdd-node var-a hi-a (zdd-union% lo-a b))) + ((> var-a var-b) + (zdd-node var-b hi-b (zdd-union% lo-b a))) + ((= var-a var-b) + (zdd-node var-a + (zdd-union% hi-a hi-b) + (zdd-union% lo-a lo-b)))))) + (defun zdd-union (&rest zdds) "Return the union of ZDDs: {α | α ∈ Z₁ or α ∈ Z₂}." (if zdds