How about equal=: -:`([: (+./"1 *.&(*./) +./) $:&>/) @. (*.&isset) ? (untested)
Marshall -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Kip Murray Sent: Tuesday, October 12, 2010 1:41 AM To: Programming forum Subject: Re: [Jprogramming] Sets Marshall's verb issub needs work. Consider in his model ]A =: (0;1);2 NB. conventional { {0,1} , 2 } ┌─────┬─┐ │┌─┬─┐│2│ ││0│1││ │ │└─┴─┘│ │ └─────┴─┘ ]B =: (1;0);2;3 NB. conventional { {1,0) , 2 , 3 } ┌─────┬─┬─┐ │┌─┬─┐│2│3│ ││1│0││ │ │ │└─┴─┘│ │ │ └─────┴─┴─┘ issub=: *./@:e. A issub B NB. { {0,1) , 2 } = { {1,0} , 2 } IS a subset of { {1,0) , 2, 3 } 0 Kip On 10/11/2010 4:53 PM, Marshall Lochbaum wrote: > Corrections: > > set=: [: , boxopen"0 > isset=: -: set > > Marshall > > -----Original Message----- > From: Marshall Lochbaum [mailto:[email protected]] > Sent: Monday, October 11, 2010 5:21 PM > To: 'Programming forum' > Subject: RE: [Jprogramming] Sets > > I am going to offer a competing model, which will hopefully clarify or > improve some things. > > In this model, a set is simply a list of boxes with no other requirement. > Sets match if each is a subset of the other, and one set is a subset of > another if all of its elements are contained in that set. > Repeating elements is only a dumb way to write something, and can be > rectified with the verb stdform. > Cross product is supported with an arbitrary number of sets--see below. > > set=: [: ,<"0 > empty=: 0$a: > > isboxed=: 32 = 3!:0 > islist=: 1...@$ > isset=: isboxed *. islist > stdform=: /:~...@~. > isstdform=: -: stdform > > ismemb=: boxo...@[ e. ] > issub=: *./@:e. > equal=: issub *. issub~ > > sor=: , > sand=: [ #~ e. > sdif=: -. > ssymdif=: sor sdif sand > card=: #...@~. > > NB. monad: accepts a list of sets in boxes. Take the cross product. > NB. dyad: find the cross product of sets x and y. > cross=: [: ,@{ ,&(] :<) > power=:<@#~ #:@i.@(2^#) > > > Marshall > > -----Original Message----- > From: [email protected] > [mailto:[email protected]] On Behalf Of Kip Murray > Sent: Sunday, October 10, 2010 12:02 AM > To: Programming forum > Subject: [Jprogramming] Sets > > Here is my latest attempt to model set theory in J. All sets have > distinct elements and are ordered by /:~ so that match -: determines > whether two sets are the same. Sets must be created by the verb set > or by provided operations. The intention is theoretical not > practical! --Kip Murray > > ]A =: set 0;'b';2 NB. elements 0 'b' 2 are put in boxes preceding the > last ┌─┬─┬─┬┐ │0│2│b││ └─┴─┴─┴┘ > ]B =: set 2;'b';'b';0 NB. same elements so same set ┌─┬─┬─┬┐ > │0│2│b││ └─┴─┴─┴┘ > > A -: B > 1 > > ]C =: set 2;'b';'c';'d' > ┌─┬─┬─┬─┬┐ > │2│b│c│d││ > └─┴─┴─┴─┴┘ > > B sand C NB. intersection, "set and" > ┌─┬─┬┐ > │2│b││ > └─┴─┴┘ > B sor C NB. union > ┌─┬─┬─┬─┬─┬┐ > │0│2│b│c│d││ > └─┴─┴─┴─┴─┴┘ > > (A sand B sor C) -: (A sand B) sor (A sand C) NB. distributive > law > 1 > > pwrset A NB. A has 3 elements, power set has 2^3, including the > empty set ┌──────┬────────┬────┬──────┬────┬──────┬──┬────┬┐ > │┌─┬─┬┐│┌─┬─┬─┬┐│┌─┬┐│┌─┬─┬┐│┌─┬┐│┌─┬─┬┐│┌┐│┌─┬┐││ > ││0│2││││0│2│b││││0││││0│b││││2││││2│b│││││││b││││ > │└─┴─┴┘│└─┴─┴─┴┘│└─┴┘│└─┴─┴┘│└─┴┘│└─┴─┴┘│└┘│└─┴┘││ > └──────┴────────┴────┴──────┴────┴──────┴──┴────┴┘ > NB. Elements are contained in boxes preceding the last which is always > NB. the Boxed Empty a: (Ace). The use of a: permits a unique and visible > NB. empty set, viz > > (,a:) -: E =: A less A NB. see verb less below > 1 > E > ┌┐ > ││ > └┘ > a: > ┌┐ > ││ > └┘ > E -: a: > 0 > > NB. Definitions > > E =: ,a: NB. empty set > set =: a: ,~ [: /:~ ~. NB. create set from boxed list y > NB. each box of y encloses an element > get =: { }: NB. get boxed elements (from curtail because > NB. elements are inside boxes of curtail) > isin =: e. }: NB. Do boxes in list x contain elements of y? > less =: a: ,~ -.&}: NB. remove elements of y from x > sand =: [ less less NB. intersection, "set and" > sor =: a: ,~ [: /:~ [: ~. ,&}: NB. union, "set or" > diff =: less sor less~ NB. symmetric difference > card =: [: # }: NB. count elements: cardinality > issubs =: [ -: sand NB. Is x a subset of y? > pwrset =: a: ,~ [: /:~ ] (<@#~) 1 (,~"1) 2 (#"1~ {:)@#:@i...@^ #...@}: > NB. pwrset by Raul Miller, adapted > islist =: 1 = #...@$ NB. islist through isunique from validate.ijs > isboxed =: 0< L. > issorted =: -: /:~ > isunique =: -: ~. > isset =: islist *. isboxed *. (a: -: {:) *. issorted@:}: *. isunique@:}: > NB. isset y asks, is array y a set? > iselement =:<@[ isin ] NB. Is array x an element of set y? > > NB. End > > ---------------------------------------------------------------------- > 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
