Some remarks.
1. A set is not required to be sorted, so I would propose  (set=:  <@~. ) .
2. Why not (Empty=: a:) ?
3. sf=: >@{S:1          NB. retrieve element from
4. eo=: e.S:0           NB. Is element of
5. un=: set@;           NB. Union; also for a list of sets
6. your mn can be shorter: (mn=:  -.&.>) or nicer (mn=: -.L:1)  NB. minus
7. nt=: [ mn mn         NB. Intersection; or
    nt=: mn/            NB. Intersection for a list of sets
9. dv=: ,.L:1           NB. Display vertically
10. eq=: mn -: mn~      NB. Equality; important since sets are not sorted


R.E. Boss

(Add your info to http://www.jsoftware.com/jwiki/Community/Demographics )

> -----Original Message-----
> From: [email protected] [mailto:programming-
> [email protected]] On Behalf Of km
> Sent: zaterdag 16 november 2013 8:13
> To: [email protected]
> Subject: [Jprogramming] Sets
> 
> 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

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to