This looks more like your result:
f=: 13 :'<"0<"0 <"1 |:((>:i.#y)*/"0 |:(|:|.|:(#y)#2)#:i.2^#y){'' '',y'
f '123'
--------T-------T-------T-------T-------T-------T-------T-------┐
│------┐│------┐│------┐│------┐│------┐│------┐│------┐│------┐│
││----┐│││----┐│││----┐│││----┐│││----┐│││----┐│││----┐│││----┐││
│││ │││││ 3│││││ 2 │││││ 23│││││1 │││││1 3│││││12 │││││123│││
││L----│││L----│││L----│││L----│││L----│││L----│││L----│││L----││
│L------│L------│L------│L------│L------│L------│L------│L------│
L-------+-------+-------+-------+-------+-------+-------+--------
Linda
-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of km
Sent: Saturday, November 16, 2013 2:13 AM
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