1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
|
\input texinfo @c -*-texinfo-*-
@c %**start of header
@setfilename sets.info
@settitle sets
@afourpaper
@documentencoding UTF-8
@documentlanguage en
@finalout
@c %**end of header
@c @defindex op
@c @synindex op vr
@c @synindex cp pg
@copying
This manual is for @command{sets}.
Copyright @copyright{} 2013 Mattias Andrée (maandree@@member.fsf.org)
@quotation
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
Texts. A copy of the license is included in the section entitled
``GNU Free Documentation License''.
@end quotation
@end copying
@ifnottex
@node Top
@top sets
@insertcopying
@end ifnottex
@titlepage
@title sets 1
@subtitle The practical way to do set operations on sets of lines in the shell
@author Mattias Andrée, maandree@@member.fsf.org
@page
@vskip 0pt plus 1filll
@insertcopying
@page
@*@*
@center Or you could just combine @command{diff}, @command{grep}, @command{sed} and @command{sort}…
@end titlepage
@contents
@menu
* Overview:: Overview of @command{sets}
* Invoking:: How to start @command{sets}
* Using:: How to use @command{sets}
* Behind the scenes:: How @command{sets} works
* License of sets:: Summary of the license of the program
* GNU Affero General Public License:: The license of the program
* GNU Free Documentation License:: The license of this manual
* Concept index:: Concept index
@end menu
@node Overview
@chapter Overview
@cindex overview
@cindex description
@command{sets} is a practical way to do set operations in the shell.
@command{sets} lets you use a normal algebraic expression for way you
want returned and supply the sets via stdin.
@node Invoking
@chapter Invoking
@cindex invoking
@cindex starting
@cindex options
@cindex arguments
@cindex @command{sets}
@cindex @option{-c}
@cindex @option{--copying}
@cindex @option{--copyright}
@cindex @option{-w}
@cindex @option{--warranty}
@command{sets} can be started with @option{-c}, @option{--copying} or
@option{--copyright} for displaying copyright information, @option{-w} or
@option{--warranty} for displaying a warranty disclaimer. If any other
options is used, help information is displayed.
To actually use @command{sets} use one argument expressing the formula
you want calculated (and no other arguments.) The expression is written
in normal algebra, meaning the you use operand–operator–operand style
expression. For example, to get the elements in set 1, that does not
exist in set 2 nor set 3, the expression is @code{1 - 2 - 3}. And yes
the sets are numbers from 1 and up in decimal.
The sets are fetched from stdin.
@node Using
@chapter Using
@cindex usage
To use @command{sets} use one argument expressing the formula you want
calculated (and no other arguments.) The expression is written in normal
algebra, meaning the you use operand–operator–operand style expression.
For example, to get the elements in set 1, that does not exist in set 2
nor set 3, the expression is @code{1 - 2 - 3}. And yes the sets are numbers
from 1 and up in decimal. Set 0 represents the empty set, and the universe
is represented by @code{U}, and is an union of all sets.
The supported operators are complement (not), symmetrical difference
(parity/xor), intersection (and), union (or), difference (material
nonimplication/abjunction). If your display is limited run @command{sets --help}
to get this list (it should be complete if you use @command{info});
the recognised symbols for the operators (and sets) are:
@table @asis
@item Complement
~ C ∁ ! ¬
@item Symmetrical difference
^ ⊕ ∆ ⊗ ⊻
@item Intersection
& * ∧ ⋀ ∩ ⋂
@item Union
| + ∨ ⋁ ∪ ⋃
@item Difference
- − \ ↛
@item Empty set
0 ∅
@item Universe
U Ω Ω 𝓤
@end table
Round brackets are recognised for evaluation order grouping.
The sets are fetched from stdin, a line in stdin in an element, sets
are seperated by blank lines, and you can have any number of blank
lines, meaning that you cannot have empty sets. But if you want
empty set you should just use an element that you know is a false
element, perhaps a dot.
@node Behind the scenes
@chapter Behind the scenes
@cindex behind the scenes
@cindex inner workings
@command{sets} is written in Python 3 and takes advantages of the
possibility to overrider operators and evalute expressions. @command{sets}
takes the user's formula and do some simple string replacements
and lets Python evaluate the expression this is after the replacements
a full Python instruction. Each line set is represented as an objcet
of a class that overloads a few operators.
@node License of sets
@appendix License of sets
@flushleft
sets – The practical way to do set operations on sets of lines in the shell
Copyright © 2012, 2013 Mattias Andrée (maandree@@member.fsf.org)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
@end flushleft
@node GNU Affero General Public License
@appendix GNU Affero General Public License
@include agpl.texinfo
@node GNU Free Documentation License
@appendix GNU Free Documentation License
@include fdl.texinfo
@node Concept index
@appendix Concept index
@printindex cp
@c @node Concept and program index
@c @appendix Concept and program index
@c @printindex pg
@c @node Variable and option index
@c @appendix Variable and option index
@c @printindex vr
@bye
|