It looks to me that ps adds an extra level of boxing. Check the result of
ps set ;:'a b'
to see if I'm wrong.
The verbs need to have appropriate ranks. I am not sure what they
should be but I will make my guesses:
sf"0 0"_ 0
sn"0 1 0
eo"_ 0 but this shows up a need for an eo that takes a boxed list of
elements and checks them all
un"0
sd"0
nt"0
so"0
cp"0
ps"0
dv =: ,.&.> but rank 0 in any case
Henry Rich
On 11/17/2013 9:19 PM, km wrote:
Will you try to "break" the following proposal before I post it on the J Wike?
Thanks,
-- Kip Murray
NB. J SETS PROPOSAL
NB. This ia a script you can copy and save, then load or loadd.
NB. INTRODUCTION
NB. Part of each set is its enclosing box. Like a Venn diagram set.
NB. A set is a box enclosing a sorted list of boxes.
NB. An element is the contents of a box in the sorted list.
NB. A -: B tests whether set A is set B.
NB. DEFINITIONS
set =: [: < [: /:~ ~. NB. create set from a box or list of boxes
NB. A set is a: or (scalar and its open is vector, boxed, without duplicates,
and sorted).
isset =: (a: -: ]) +. [: *./ (0 = #@$) , [: ( (1 = #@$),(0 < L.),(-: ~.),(-: /:~)
) >
NB. ILLUSTRATIONS
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
NB. DEFINITIONS
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
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 "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!
NB. EXAMPLES
(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