From 190d5e4406cafd9a6f832c294adc9bba9bd0f861 Mon Sep 17 00:00:00 2001 From: William Carroll Date: Thu, 23 Jan 2020 14:51:50 +0000 Subject: Support set/{super,sub}set Define predicates for testing whether two sets are supersets or subsets. --- configs/shared/.emacs.d/wpc/set.el | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'configs/shared/.emacs.d/wpc/set.el') diff --git a/configs/shared/.emacs.d/wpc/set.el b/configs/shared/.emacs.d/wpc/set.el index c77e2d0cd5f5..ff2db75d94ab 100644 --- a/configs/shared/.emacs.d/wpc/set.el +++ b/configs/shared/.emacs.d/wpc/set.el @@ -97,6 +97,16 @@ "Return t if sets A and B have no shared members." (set/empty? (set/intersection a b))) +(defun set/superset? (a b) + "Return t if set A contains all of the members of set B." + (->> b + set/to-list + (list/all? (lambda (x) (set/contains? x a))))) + +(defun set/subset? (a b) + "Return t if each member of set A is present in set B." + (set/superset? b a)) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Tests ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -132,6 +142,24 @@ (->> '(1 1 2 2 3 3) set/from-list set/to-list))) + (let ((primary-colors (set/new "red" "green" "blue"))) + ;; set/subset? + (prelude/refute + (set/subset? (set/new "black" "grey") + primary-colors)) + (prelude/assert + (set/subset? (set/new "red") + primary-colors)) + ;; set/superset? + (prelude/refute + (set/superset? primary-colors + (set/new "black" "grey"))) + (prelude/assert + (set/superset? primary-colors + (set/new "red" "green" "blue"))) + (prelude/assert + (set/superset? primary-colors + (set/new "red" "blue")))) ;; set/empty? (prelude/assert (set/empty? (set/new))) (prelude/refute (set/empty? (set/new 1 2 3))) -- cgit 1.4.1