\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 . @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