Data and Math
vsetx
Extended set algebra, including multisets, on top of the built in sets.
Released v1.0.0 · 2026-09-28use "stdlib/setx.ven"
m = new_map()
multiset_add(m, "a")
multiset_add(m, "a")
print multiset_count(m, "a")
Reference (11 functions)
API reference
multiset_add(m, item)
Increments items occurrence count in the multiset Map m.
m = new_map()
multiset_add(m, "a")
multiset_add(m, "a")
print multiset_count(m, "a")multiset_from(items)
Builds a fresh multiset Map counting every occurrence in items.
m = multiset_from(["a", "a", "b", "c"])
print multiset_count(m, "a")
print multiset_count(m, "b")multiset_count(m, item)
Gives back how many times item occurs in the multiset Map m.
m = multiset_from(["a", "a", "b"])
print multiset_count(m, "a")
print multiset_count(m, "z")multiset_union(a, b)
Gives back the multiset union of a and b: each value's higher count.
x = multiset_from(["a", "a", "b"])
y = multiset_from(["a", "b", "b", "c"])
u = multiset_union(x, y)
print multiset_count(u, "a")
print multiset_count(u, "b")
print multiset_count(u, "c")multiset_intersection(a, b)
Gives back the multiset intersection of a and b: each shared value's lower count.
x = multiset_from(["a", "a", "b"])
y = multiset_from(["a", "b", "b", "c"])
i = multiset_intersection(x, y)
print multiset_count(i, "a")
print multiset_count(i, "b")
print multiset_count(i, "c")power_set(items)
Builds every subset of items, as a List of Lists.
print power_set([1, 2])
print power_set([])jaccard_similarity(a, b)
sa = frozen_set([1, 2, 3])
sb = frozen_set([2, 3, 4])
print jaccard_similarity(sa, sb)
print jaccard_similarity(sa, frozen_set([]))symmetric_difference(a, b)
Gives back every element in exactly one of a or b, not both.
sa = frozen_set([1, 2, 3])
sb = frozen_set([2, 3, 4])
print symmetric_difference(sa, sb)is_disjoint(a, b)
Tests whether Sets a and b share no elements at all.
sa = frozen_set([1, 2, 3])
sb = frozen_set([2, 3, 4])
print is_disjoint(sa, sb)
print is_disjoint(sa, frozen_set([9, 10]))interval_merge(ranges)
Merges overlapping or touching (low, high) intervals into their union.
print interval_merge([(1, 3), (2, 6), (8, 10), (15, 18)])
print interval_merge([])interval_contains(intervals, value)
Tests whether value falls inside any of intervals, bounds inclusive.
merged = interval_merge([(1, 3), (2, 6), (8, 10), (15, 18)])
print interval_contains(merged, 4)
print interval_contains(merged, 7)