Much of the code in the previous J programs/expressions has to do with
transforming between representations.  The following is a fairer comparison
between the WL program and an equivalent J program.

Society is table of pairs, each pair an integer representing a person's
name and another representing a person in the first person's social
network.  Thus:

   p=: _2 ]\ 1 5 1 7 4 1 4 2 5 2 5 7 6 2 7 8 8 5
   p
1 5
1 7
4 1
4 2
5 2
5 7
6 2
7 8
8 5

To modify p so that anyone in another's network includes that person in
their network:

   p , |."1 p
1 5
1 7
4 1
4 2
5 2
5 7
6 2
7 8
8 5
5 1
7 1
1 4
2 4
2 5
7 5
2 6
8 7
5 8

If you want it sorted:

   /:~ p , |."1 p
1 4
1 5
1 7
2 4
2 5
2 6
4 1
4 2
5 1
5 2
5 7
5 8
6 2
7 1
7 5
7 8
8 5
8 7

Therefore:

WL:

symSoc = society /.
 {a_Integer, b_} :> {a, Union[b, Cases[society, {x_, {___, a, ___}} :> x]]}


J:

p,|."1 p
/:~p,|."1 p

​
​





On Thu, Sep 12, 2013 at 9:51 PM, Roger Hui <rogerhui.can...@gmail.com>wrote:

> 0. Do you care to explain how this WL program works?
> ​
> symSoc = society /.
>  {a_Integer, b_} :> {a, Union[b, Cases[society, {x_, {___, a, ___}} :> x]]}
>
> 1. How well does it perform if "society" has 10 million members?
>
>
>
>
> On Thu, Sep 12, 2013 at 9:37 PM, Richard Gaylord <rjgayl...@gmail.com>wrote:
>
>> roger:
>>
>> thanks very much for your response. the code in my lecture notes does
>> include the case where each person is a member of his network.
>>
>> when i look at your code , i realize that i would be best to keep using
>> the
>> Wolfram language (WL) rather than learn to master J as you have (of course
>> that's understandable since you created J ). i am too set in my
>> programming
>> ways to learn a new  language at this point unless it offers me something
>> very substantially better than WL.
>>
>> also, i happen to truly love WL and have been a WL evangelist for 25
>> years,
>> using it in my four books and teaching WL with great pleasure to over a
>> thousand students at university in a variety of fields (physics,
>> chemistry,
>> biology, sociology and economics/business) and in industry and government,
>> how WL works in 6.5 hrs. of lecture (sometimes given in four 90 minute
>> classroom increments and sometimes in one day-long lecture).
>>
>> you know, i first learned WL
>>
>> - which has been unfortunately been called Mathematica which is the
>> software that is built upon WL because stephen wolfram took 25 years
>> before
>> announcing this spring the imminent release of WL as a stand-alone app to
>> run on computers and mobile devices (as J already does) -
>>
>> by reading "Life; Nasty, Brutish and Short" and thereby learning array
>> processing. and implementing it in WL while also incorporating anonymous
>> functions (J was not yet created)  and nested function calls and
>> eventually
>> rules and pattern matching. To this day, i consider consider myself an
>> APL'er by nature who delights in the creation of unreadable one-liner code
>> LOL. but i do it in WL which is far easier for me to read and work with
>> (and i actually first became aware of APL through stephen's Mathematica
>> book).
>>
>> i also recall returning to the US from an APL meeting in Toronto (where i
>> gave a tutorial on WL) sitting next to Arthur Whitney  on the plane,
>> running side-by-side comparisons of the speed of my writing  and running
>> pieces of code in WL with Arthur's doing the same with his just created K
>> language on our respective MacBooks.
>>
>> As a scientist (i'm a theoretical condensed soft matter physicist), i have
>> available a community of well over a million users of Mathematica to teach
>> WL to and to learn from and that's too great resource for me to not use
>> (if
>> i could get them each to buy at least one of my books, i'd be financially
>> set LOL).
>>
>> so i guess i'll continue to use WL and to wear my custom-made black WL
>> icon
>> logo T-shirt.
>>
>> richard
>>
>>
>> On Thu, Sep 12, 2013 at 7:53 PM, Roger Hui <rogerhui.can...@gmail.com
>> >wrote:
>>
>> > If we modify the input slightly, by requiring that each person is a
>> member
>> > of his own network (i.e. the reflexive closure), then the computation
>> can
>> > be more concise:
>> >
>> >    c=: 0;1 5 7;2 ;3;4 1 2;5 2 7;6 2;7 8;8 5
>> >    c
>> > ┌─┬─────┬─┬─┬─────┬─────┬───┬───┬───┐
>> > │0│1 5 7│2│3│4 1 2│5 2 7│6 2│7 8│8 5│
>> > └─┴─────┴─┴─┴─────┴─────┴───┴───┴───┘
>> >    <@~././ |: (,|."1) (I.#&>c),.;c
>> > ┌─┬───────┬───────┬─┬─────┬─────────┬───┬───────┬─────┐
>> > │0│1 5 7 4│2 4 5 6│3│4 1 2│5 2 7 1 8│6 2│7 8 1 5│8 5 7│
>> > └─┴───────┴───────┴─┴─────┴─────────┴───┴───────┴─────┘
>> >
>> >
>> >
>> >
>> >
>> > On Thu, Sep 12, 2013 at 4:27 PM, Roger Hui <rogerhui.can...@gmail.com
>> > >wrote:
>> >
>> > >    s=: '';5 7;'';'';1 2;2 7;2;8;5
>> > >    s
>> > > ┌┬───┬┬┬───┬───┬─┬─┬─┐
>> > > ││5 7│││1 2│2 7│2│8│5│
>> > > └┴───┴┴┴───┴───┴─┴─┴─┘
>> > >    j -.&.>~ </./ |: (,.~j),(,|."1) (;s),.(#&>s)#j=. i.#s
>> > > ┌┬─────┬─────┬┬───┬───────┬─┬─────┬───┐
>> > > ││4 5 7│4 5 6││1 2│1 8 2 7│2│1 5 8│7 5│
>> > > └┴─────┴─────┴┴───┴───────┴─┴─────┴───┘
>> > >
>> > > (;s),.(#&>s)#j are the relationships in ordered pair form; (,|."1) of
>> > that
>> > > catenates the reversed ordered pairs; and the rest of the code puts
>> the
>> > > information back into the form in which s is specified.
>> > >
>> > > Repeated application of this processes is the transitive closure
>> (friend
>> > > of my friend is also my friend, *ad infinitum*).
>> > >
>> > >
>> > >
>> > > On Thu, Sep 12, 2013 at 3:44 PM, Richard Gaylord <rjgayl...@gmail.com
>> > >wrote:
>> > >
>> > >> here's some code in the Wolfram Programming Language (the language
>> > >> underlying Mathematica) illustring the use of pattern matching.
>> > >>
>> > >>
>> > >>
>> > >> Society is a list of the attribute lists of people. As an
>> illustration,
>> > we
>> > >> will create a society consisting of eight people, each with two
>> > >> attributes.
>> > >> In each person's attribute list,
>> > >> the first element (which is a number) represents the person's name ,
>> > >>
>> > >> the second element which is a list of numbers) is a list of the
>> names of
>> > >> the members of the person's social network.
>> > >>
>> > >>
>> > >> society = {{1, {5, 7}},
>> > >>            {2, {}},
>> > >>            {3, {}},
>> > >>            {4, {1, 2}},
>> > >>            {5, {2, 7}},
>> > >>            {6, {2}}},
>> > >>            {7, {8}},
>> > >>            {8, {5}}}
>> > >>
>> > >> We can modify society so that anyone who is in another person's
>> social
>> > >> network includes that person in their own social network (i.e.,
>> > reciprocal
>> > >> social connections).
>> > >>
>> > >> symSoc = society /.
>> > >>  {a_Integer, b_} :> {a, Union[b, Cases[society, {x_, {___, a, ___}}
>> :>
>> > >> x]]}
>> > >>
>> > >> symSoc = {{1, {4, 5, 7}},
>> > >>           {2, {4, 5, 6}},
>> > >>           {3, {}},
>> > >>           {4, {1, 2}},
>> > >>           {5, {1, 2, 7, 8}},
>> > >>           {6, {2}},
>> > >>           {7, {1, 5, 8}},
>> > >>           {8, {5, 7}}}
>> > >>
>> > >> how would this be done in J?
>> > >>
>> > >> note: a pdf of the note set on the Wolfram Language in which the
>> > >> expressions for society and symSoc appear on p. 42 can be downloaded
>> at
>> > >>
>> > >> http://library.wolfram.com/infocenter/MathSource/5216
>> >
>>
>> --
>>
>> *"Those who would sacrifice freedom for security deserve neither." -
>> Benjamin Franklin*
>>
>>
>> *"I think that the very notion that equations are a good approach to
>> describing the natural world is a little bizarre."
>>  - Stephen Wolfram*
>>
>> *
>> *
>> ----------------------------------------------------------------------
>> 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