Corrections:

     NB. Proposal - a "set" is a sorted list of boxes, without repetitions.

     set =: ([: /:~ ~.) : [:   NB. usage set list-of-boxes creates a set

Improvement:

     is =: -:                  NB. usage set is set

Add:

     IsSet =: (-: ~.)*.(1 = #...@$)*.(32 = 3!:0)   NB. usage IsSet array


Please test these and report errors.


Kip Murray wrote:
> Please try the following, let me know if you find errors.
> 
>     NB. Proposal - a "set" is a sorted list of boxes.
>     NB. An element is the array contained in a box.
> 
>     set =: /:~           NB. usage set list-of-boxes creates a set
> 
>     count =: #           NB. usage count set
> 
>     in =: <@[ e. ]       NB. usage array in set
> 
>     index =: i. <        NB. usage set index array
> 
>     get =: {::           NB. usage index get set
> 
>     is =: =&<            NB. usage set is set
> 
>     u =: [: set -. , ]   NB. union
> 
>     n =: [ -. -.         NB. intersection
> 
>     Less =: -.           NB. difference
> 
>     subset =: [ is n     NB. usage set subset set
> 
>     member =: in         NB. usage array member set
> 
>     E =: set 0$<1        NB. empty set
> 
> 
> Applying this to Butch's example, I get
> 
>     ]S =: set 1 ; (set(set 3;4);8;<(set 8;9)) ; 10   NB. for < see next note
> +-+--+---------------+
> |1|10|+-+-----+-----+|
> | |  ||8|+-+-+|+-+-+||
> | |  || ||3|4|||8|9|||
> | |  || |+-+-+|+-+-+||
> | |  |+-+-----+-----+|
> +-+--+---------------+
> 
> The set is given in a standard order that makes it easier to test whether a 
> set 
> is an element of another set and whether two sets have the same members and 
> thus 
> are considered to be the same set.  Now let
> 
>     ]one =: 1
> 1
> 
>     ]two =: set (set 3;4);8;<(set 8;9)  NB. < overcomes irregularity in ;
> +-+-----+-----+
> |8|+-+-+|+-+-+|
> | ||3|4|||8|9||
> | |+-+-+|+-+-+|
> +-+-----+-----+
> 
>     ]three =: 10
> 10
> 
> and we see that
> 
>     (set one;two;three) is S
> 1
>     count S
> 3
>     (one member S) *. (two member S) *. (three member S)
> 1
>     ((set 3;4) member two) *. (8 member two) *. ((set 8;9) member two)
> 1
> 
> To get 8 from two you can notice
> 
>     two index 8
> 0
> 
> and do
> 
>     0 get two
> 8
> 
> To get that 8 from S you can similarly do
> 
>     0 get (2 get S)
> 8
> 
> which can be abbreviated
> 
>     (2;0) get S  NB. Get element 2 then get element 0 from that
> 8
> 
> You can now figure out how to get the other 8 from S.
> 
> Puzzle:
> 
>     two member S
> 1
>     two subset S
> 0
>     (set <two) subset S
> 1
> 
> 
> [email protected] wrote:
>>  ----- Original Message Follows -----
>> From: [email protected]
>> To: Programming forum <[email protected]>
>> Subject: Re: [Jprogramming] sets within a set
>> Date: Thu, 16 Jul 2009 16:19:23 -0800
>>
>>> I wanted a set made up from:
>>>
>>> 1.  member 1
>>> 2.  set { { 3, 4}, 8, { 8, 9}}
>>> 3.  member 10
>>>
>>> So, I believe I am creating my desired set correctly.
>>>
>>> I am struggling with howw to extract the 8 from the middle 
>>> of the "2. set {{3, 4}, 8, {8,9}}'
>>>
>>> Given testSet=:1; ((3,4); 8; (8,9)); 10
>>>
>>> I would have thought it was 1 } 1 } testSet, but is not and
>>> I get an index
>>> error.  I do a '# 1 } testSet' and it returns 1
> ----------------------------------------------------------------------
> 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