I think the utilities discussed here are all useful, and thanks to everyone for sharing.
in terms of design, sorted set and unordered set are of course useful, but the sorted status is best as an extra operation. The functionality of nub is quite useful, in that the nub takes into consideration the order in which elements are added, and so if you link to a set that is later added to, what was in position 2 stays in position 2. If you only care about sorted sets, then sort them and discard the original. In terms of the outer boxing, considering a set as a list of boxes seems right. Multiple sets or code that traverses multiple sets can be fed the outer boxed version. I'm sure that doing it your way has usefulness for you, but you may be bleeding library design decisions into your application scenario. ________________________________ From: km <[email protected]> To: "[email protected]" <[email protected]> Sent: Saturday, November 16, 2013 11:57:38 AM Subject: Re: [Jprogramming] Powersets (was RE: Sets) Your power set is what I call a list of sets, not a set of sets -- because I define a set to be a box enclosing a sorted list of boxes. On the other hand, your power set is a set of sets if you define a set to be a list of boxes. I therefore have a proposal for you indicated by the verbs below whose names end in a 'p' . Why do I include Sort /:~ in my proposal? Let's discuss that another time. The ~. and ,L:1 you will see ensure that even singleton sets are lists (not atoms), which makes them sort properly with other lists. psb=: a:,[:(],[,,L:1)/ <L:0@> NB. power set, R.E. Boss psb set 0;1;2 NB. List of sets or set of sets? ++---+---+-----+---+-----+-----+-------+ ||+-+|+-+|+-+-+|+-+|+-+-+|+-+-+|+-+-+-+| |||2|||1|||1|2|||0|||0|2|||0|1|||0|1|2|| ||+-+|+-+|+-+-+|+-+|+-+-+|+-+-+|+-+-+-+| ++---+---+-----+---+-----+-----+-------+ NB. Proposed for R.E. Boss setbp =: [: /:~ ~. NB. Create set from list of boxes psbp =: [: /:~ [: ,L:1 a: , [: (] , [ , ,L:1)/ <L:0 setbp 2;0;1;2 NB. Here a set is a sorted list of boxes +-+-+-+ |0|1|2| +-+-+-+ psbp setbp 0;1;2 NB. power set ++---+-----+-------+-----+---+-----+---+ ||+-+|+-+-+|+-+-+-+|+-+-+|+-+|+-+-+|+-+| |||0|||0|1|||0|1|2|||0|2|||1|||1|2|||2|| ||+-+|+-+-+|+-+-+-+|+-+-+|+-+|+-+-+|+-+| ++---+-----+-------+-----+---+-----+---+ $L:1 psbp setbp 0;1;2 +-+-+-+-+-+-+-+-+ |0|1|2|3|2|1|2|1| +-+-+-+-+-+-+-+-+ --Kip Murray Sent from my iPad > On Nov 16, 2013, at 5:04 AM, "R.E. Boss" <[email protected]> wrote: > > ps=: a:,[:(],[,,L:1)/ <L:0@> > > ,.L:1 ps B > > +-+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ > > | |+-+|+-+|+-+|+-+|+-+|+-+|+-+|+-+|+-+|+-+|+-+|+-+|+-+|+-+|+-+| > > | ||3|||4|||4|||a|||a|||a|||a|||b|||b|||b|||b|||b|||b|||b|||b|| > > | |+-+|+-+|+-+|+-+|+-+|+-+|+-+|+-+|+-+|+-+|+-+|+-+|+-+|+-+|+-+| > > | | | ||3|| ||3|||4|||4|| ||3|||4|||4|||a|||a|||a|||a|| > > | | | |+-+| |+-+|+-+|+-+| |+-+|+-+|+-+|+-+|+-+|+-+|+-+| > > | | | | | | | ||3|| | | ||3|| ||3|||4|||4|| > > | | | | | | | |+-+| | | |+-+| |+-+|+-+|+-+| > > | | | | | | | | | | | | | | | ||3|| > > | | | | | | | | | | | | | | | |+-+| > > +-+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ > > > > 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 ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
