The J solution is in the form f&.g, a pattern that is
ubiquitous<http://www.jsoftware.com/jwiki/Essays/Under>in mathematics
and computing.  How do you express that in WL?


On Wed, Oct 9, 2013 at 7:35 AM, Roger Hui <[email protected]> wrote:

> My solution started with transforming your representation of "society"
> into a form in which the solution is simple, even a no-op (an identity
> function), and then transforming it back to the same representation as in
> the input.  In this case the transformations of the representation are much
> harder than the underlying mathematical problem.
>
> You'll have to decide for yourself whether this demonstrates that J can do
> pattern matching.
>
>
>
>
> On Tue, Oct 8, 2013 at 2:37 PM, Richard Gaylord <[email protected]>wrote:
>
>> i'm not requiring that a hammer always be used. i didn't ask if it was
>> possible to calculate symSoc from society in J. i know you can do that
>> without pattern matching.
>>
>> i only wanted to know if J can do pattern matching. i obviously should
>> have
>> given a better example (but it's not a fair comparison if i use an input
>> of
>> society and you write code starting with p instead). but it gets too hard
>> to explain (e.g. i'd like to see how J can be used to do write a program
>> using the equivalent of the SocNetfunction which is very useful for doing
>> agent-based modeling as indicated in my lecture notes).
>>
>> your solution is terrific, no question. but there care cases where using a
>> scapel doesn't work or is inefficient. the "law of the hammer" could be
>> called the "law of the scapel" just as well. there are cases where
>>  pattern
>> matching is the appropriate  or easiest tool and i want to know if J can
>> do
>> that.
>>
>>
>>
>> On Tue, Oct 8, 2013 at 4:12 PM, Roger Hui <[email protected]>
>> wrote:
>>
>> > You have a hammer (pattern matching) and you are requiring that a
>> problem
>> > must be solved using a hammer.  I solved the same problem with a
>> scalpel.
>> >
>> >
>> >
>> >
>> > On Tue, Oct 8, 2013 at 1:49 PM, Richard Gaylord <[email protected]>
>> > wrote:
>> >
>> > > *sorry it took me so long to return to the thread. i've been dealing
>> with
>> > > health issues again (my advice is not to develop an autoimmune
>> > neurological
>> > > disease).*
>> > > *
>> > > *
>> > > *the responses to my question about pattern matching in J really do
>> not
>> > > address the matter. the code given by roger*
>> > > *
>> > > *
>> > >
>> > > *p,|."1 p
>> > > *
>> > >   * /:~p,|."1 p *
>> > > *
>> > > *
>> > > *is very clever but it does not, as best i can tell, directly employ
>> > > pattern matching while my WL code does. *
>> > > *
>> > > *
>> > > *also, it does not start at the same point (use the same input) as
>> the WL
>> > > code, nor does it end at the same point (with the same output) as te
>> WL
>> > > code. *
>> > > *
>> > > *
>> > > *perhaps it is my fault becuase of the specific example i used but
>> let me
>> > > restate it exactly as the corresponding code needs to appear and tn
>> > perhaps
>> > > the code to accomplish the same task in J can be posted *
>> > > *
>> > > *
>> > > *(but it must have the identical Input [1] and Output [2]  as the WL
>> code
>> > >  (starting with p - which is not the same as society - is not
>> acceptable
>> > > (although i can certainly convert society into p in WL).  it must
>> start
>> > > with society (or whatever you want to call it as long as it has the
>> > > identical structure)*
>> > > *
>> > > *
>> > > *Input[1]*
>> > > *
>> > > *
>> > > *society = {{1, {5, 7}}, {2, {}}, {3, {}}, {4, {1, 2}}, {5, {2, 7}},
>> {6,
>> > > {2}}, {7, {8}}, {8, {5}}};*
>> > > *
>> > > *
>> > > *note: becuase of my use of the semi-colon, Input [1] does not return
>> any
>> > > Output*
>> > > *
>> > > *
>> > >
>> > > *note: the 2nd element in each list in society is not necessarily
>> limited
>> > > to an empty list and a 2-element list. it just happened to be that
>> way.*
>> > > *
>> > > *
>> > >
>> > > *Input [2]*
>> > >
>> > > *
>> > > *
>> > >
>> > > *symSoc = society /.*
>> > >
>> > > *  {a_Integer, b_} :> {a, Union[b, Cases[society, {x_, {___, a, ___}}
>> :>
>> > > x]]}*
>> > >
>> > > *
>> > > *
>> > >
>> > > *Output [2]*
>> > >
>> > > *
>> > > *
>> > >
>> > > *{{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}}}*
>> > >
>> > > *
>> > > *
>> > >
>> > >
>> > > *as for roger's question as to what the WL code is doing:*
>> > >
>> > > *
>> > > *
>> > >
>> > > *we start in society with a list which contains a list *
>> > >
>> > > *for each person in the system (so if there are 8 people in society,
>> the
>> > > list consists of 8 elements, each a list.*
>> > >
>> > > *
>> > > *
>> > >
>> > > *e.g.. for person A we have **{A, {B,**R,E}} **the first element is
>> the
>> > > person's name and the second element in each list is a list of the
>> names
>> > of
>> > > the friends of A (let's say they are B, R, E).*
>> > >
>> > > * *
>> > >
>> > > *using symSoc, we look at the list of each and every person in the
>> > system.
>> > > specifically, we look at the 2nd element for each person to see if the
>> > name
>> > > A appears anywhere in another person's list of friends e.g. look at
>> the
>> > > list of friends of person D, and if A is in the list, then the name D
>> is
>> > > added to the list of friends of A. *
>> > >
>> > > *
>> > > *
>> > >
>> > > *since it may be that D is already listed as a friend of A, D would
>> > appear
>> > > twice in the list of of A's friends so we use the Union command to set
>> > rid
>> > > of the duplicates of names and sort them as well.*
>> > >
>> > > *
>> > > *
>> > >
>> > > *i hope this explanation is clear (i don't usually explain what what
>> my
>> > > code is doing; some of the functions i like to create are nested
>> > anonymous
>> > > (or pure) functions that are virtually unreadable, even to me a day
>> or so
>> > > after i've created them).*
>> > >
>> > > *
>> > > *
>> > >
>> > > *finally, let me note that anything that can be done in J can be done
>> in
>> > WL
>> > > and in this case, roger took my example and without using what i call
>> > > pattern matching accomplished the same thing. but there are cases
>> where
>> > > pattern matching is, if not the only way to go, it is much easier to
>> > write
>> > > the code for.*
>> > >
>> > > *
>> > > *
>> > >
>> > > *i hope this explains what's going on and what i' m asking about. if
>> you
>> > go
>> > > to my note set (available as a pdf at
>> > > http://library.wolfram.com/infocenter/MathSource/5216/ you'll find a
>> > > tutorial on WL and the last section includes the code above and more
>> code
>> > > (i especially like the SocNetFunction i created which is a nested
>> > anonymous
>> > > function*
>> > >
>> > > *
>> > > *
>> > >
>> > > *socNetFunction[rule_] := Function[y, Map[rule[Join[{#}, y[[#[[2]] ]]
>> ] ]
>> > > &, y] ]*
>> > >
>> > > *
>> > > *
>> > >
>> > > *
>> > > *
>> > >
>> > > *   *
>> > >
>> > >
>> > >
>> > >
>> > > --
>> > >
>> > > *"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*
>> > >
>> > > *
>> > > *
>> > >
>> > > nested
>> > > ----------------------------------------------------------------------
>> > > For information about J forums see
>> http://www.jsoftware.com/forums.htm
>> > >
>> > ----------------------------------------------------------------------
>> > For information about J forums see http://www.jsoftware.com/forums.htm
>> >
>>
>>
>>
>> --
>>
>> *"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