The following script for doing sets in J is a big improvement over what I 
proposed several years ago.  You can save it and then do a loadd.  I would like 
to make it a J Wiki page, but it will take a while to relearn how to do that.  
Near the end is my verb ps for creating power sets and another cp for creating 
the Cartesian product of two sets.  --Kip Murray

NB. A set is a box with a sorted list of boxes inside.  
NB. An element is the contents of a box in the sorted list.
NB. A -: B tests whether set A is set B.

set =: [: < [: /:~ ~.  NB. create set from a box or list of boxes

isset =: -: [: set >  NB. test whether y is a set


set 'a';i.2 2  NB. elements are 'a' and i. 2 2

set <'a'  NB. sole element is 'a'

]Empty =: set ''  NB. the empty set, same as Ace a:

isset Empty


sf =: [: > ({ >)  NB. From { for sets: retrieve xth element of y, a set

sn =: ([: # >) : ([: < (# >))  NB. Number # for sets

eo =: <@[ e. >@]  NB. test whether x is an element of y

un =: [: set ,&>  NB. union of x and y

mn =: [: < -.&> NB. "minus" -- create set with the elements of x that are not 
in y

sd =: mn un mn~  NB. symmetric difference

nt =: un mn sd  NB. intersection

so =: un -: ]  NB. test whether x is a subset of y

cp =: [: set [: , ({@(,&<))&>  NB. Cartesian product, adapted from CP in 
Vocabulary's "Catalog {"

ps =: [: set [: <"0 ([: #: [: i. 2 ^ #@>) <@#"1 >  NB. ps y is the power set of 
y

NB. ps y is the set whose elements are all the subsets of y .  There are 2^#>y 
of them.

dv =: [: < [: ,. >  NB. dv y displays the set y vertically, useful for power 
sets!


(set 1;2;3;3) -: set 3;1;2  NB. On each side the elements are 1 and 2 and 3 .

]A =: set 2;'b';1;'a'

]B =: set 'b';'a';4;3;'a'

A un B

A sd B

A nt B

(set 1;2) cp set 'a';'b';'c'

ps set 0;1;2


Sent from my iPad
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to