Data and Math

vsetx

Extended set algebra, including multisets, on top of the built in sets.

Released v1.0.0 · 2026-09-28
Import
use "stdlib/setx.ven"
vsetx.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)

Get notified when vsetx changes

Get notified about

New versions and security advisories.

New and updated packages, once a day.

News on the math model built in Venutian.