## table of contents

struct::set(3tcl) | Tcl Data Structures | struct::set(3tcl) |

# NAME¶

struct::set - Procedures for manipulating sets

# SYNOPSIS¶

package require **Tcl 8.0**

package require **struct::set ?2.2.3?**

**::struct::set** **empty** *set*

**::struct::set** **size** *set*

**::struct::set** **contains** *set* *item*

**::struct::set** **union** ?*set1*...?

**::struct::set** **intersect** ?*set1*...?

**::struct::set** **difference** *set1* *set2*

**::struct::set** **symdiff** *set1* *set2*

**::struct::set** **intersect3** *set1* *set2*

**::struct::set** **equal** *set1* *set2*

**::struct::set** **include** *svar* *item*

**::struct::set** **exclude** *svar* *item*

**::struct::set** **add** *svar* *set*

**::struct::set** **subtract** *svar* *set*

**::struct::set** **subsetof** *A* *B*

# DESCRIPTION¶

The **::struct::set** namespace contains several useful
commands for processing finite sets.

It exports only a single command, **struct::set**. All
functionality provided here can be reached through a subcommand of this
command.

*Note:* As of version 2.2 of this package a critcl based C
implementation is available. This implementation however requires Tcl 8.4 to
run.

# COMMANDS¶

**::struct::set****empty***set*- Returns a boolean value indicating if the
*set*is empty (**true**), or not (**false**). **::struct::set****size***set*- Returns an integer number greater than or equal to zero. This is the
number of elements in the
*set*. In other words, its cardinality. **::struct::set****contains***set**item*- Returns a boolean value indicating if the
*set*contains the element*item*(**true**), or not (**false**). **::struct::set****union**?*set1*...?- Computes the set containing the union of
*set1*,*set2*, etc., i.e. "*set1*+*set2*+ ...", and returns this set as the result of the command. **::struct::set****intersect**?*set1*...?- Computes the set containing the intersection of
*set1*,*set2*, etc., i.e. "*set1***set2** ...", and returns this set as the result of the command. **::struct::set****difference***set1**set2*- Computes the set containing the difference of
*set1*and*set2*, i.e. ("*set1*-*set2*") and returns this set as the result of the command. **::struct::set****symdiff***set1**set2*- Computes the set containing the symmetric difference of
*set1*and*set2*, i.e. ("(*set1*-*set2*) + (*set2*-*set1*)") and returns this set as the result of the command. **::struct::set****intersect3***set1**set2*- This command is a combination of the methods
**intersect**and**difference**. It returns a three-element list containing "*set1***set2*", "*set1*-*set2*", and "*set2*-*set1*", in this order. In other words, the intersection of the two parameter sets, and their differences. **::struct::set****equal***set1**set2*- Returns a boolean value indicating if the two sets are equal (
**true**) or not (**false**). **::struct::set****include***svar**item*- The element
*item*is added to the set specified by the variable name in*svar*. The return value of the command is empty. This is the equivalent of**lappend**for sets. If the variable named by*svar*does not exist it will be created. **::struct::set****exclude***svar**item*- The element
*item*is removed from the set specified by the variable name in*svar*. The return value of the command is empty. This is a near-equivalent of**lreplace**for sets. **::struct::set****add***svar**set*- All the element of
*set*are added to the set specified by the variable name in*svar*. The return value of the command is empty. This is like the method**include**, but for the addition of a whole set. If the variable named by*svar*does not exist it will be created. **::struct::set****subtract***svar**set*- All the element of
*set*are removed from the set specified by the variable name in*svar*. The return value of the command is empty. This is like the method**exclude**, but for the removal of a whole set. **::struct::set****subsetof***A**B*- Returns a boolean value indicating if the set
*A*is a true subset of or equal to the set*B*(**true**), or not (**false**).

# REFERENCES¶

# BUGS, IDEAS, FEEDBACK¶

This document, and the package it describes, will undoubtedly
contain bugs and other problems. Please report such in the category
*struct :: set* of the *Tcllib Trackers*
[http://core.tcl.tk/tcllib/reportlist]. Please also report any ideas for
enhancements you may have for either package and/or documentation.

When proposing code changes, please provide *unified diffs*,
i.e the output of **diff -u**.

Note further that *attachments* are strongly preferred over
inlined patches. Attachments can be made by going to the **Edit** form of
the ticket immediately after its creation, and then using the left-most
button in the secondary navigation bar.

# KEYWORDS¶

cardinality, difference, emptiness, exclusion, inclusion, intersection, membership, set, symmetric difference, union

# CATEGORY¶

Data structures

# COPYRIGHT¶

Copyright (c) 2004-2008 Andreas Kupries <andreas_kupries@users.sourceforge.net>

2.2.3 | tcllib |