Responding to Mike's query about @ 

Mathematical composition  f o g  means "do g first, then f" and is expressed in 
J by the monadic use of  f @: g  or  [: f g .  The monadic use of  f @ g  can 
surprise you, compare

   |.@:+: 1 2 3
6 4 2
   |.@+: 1 2 3
2 4 6

-- the first means double vector 1 2 3 then reverse the resulting vector, the 
second means double and reverse each scalar then assemble the results.

Kip Murray 

Sent from my iPad


On Nov 13, 2012, at 8:44 PM, "Linda Alvord" <lindaalv...@verizon.net> wrote:

> I can only give a personal response.  Maybe it is because I'm left handed.
> 
> When I look at  ((<@#)&(i.n))@(0&<)  at or 
> 
> -----Original Message-----
> From: programming-boun...@forums.jsoftware.com
> [mailto:programming-boun...@forums.jsoftware.com] On Behalf Of Mike Day
> Sent: Monday, November 12, 2012 6:40 AM
> To: programm...@jsoftware.com
> Subject: Re: [Jprogramming] Arc consistency in J
> 
> But what's wrong with @ that's preferable with [:   ?        (I think 
> Th is has been asked before.)
> 
> Aren't they both devices to represent what "ordinary" mathematicians 
> just write as f g h ... for the composition of f g h ...   ?
> 
> Since J cleverly allows hooks and forks and interprets unbracketed trains of
> verbs as such,  it needs some other way to recognise composition,  and
> that's what both @ (and @:) and [: do for us - so why 
> avoid one or the other of them?   I agree it took a lot of time to get 
> my head round the new way of seeing trains of verbs.
> 
> Mike
> 
> On 12/11/2012 7:57 AM, Linda Alvord wrote:
>> Well, it was possible, once I managed to get the rank right. Thanks 
>> for providing hope that it could be done. Actually it is not too bad 
>> looking after all.
>> 
>>    A
>> 0 0 1 0 0
>> 0 0 0 0 0
>> 2 0 0 0 1
>> 0 0 0 0 1
>> 0 0 2 2 0
>> 
>>    adj=:((<@#)&(i.n))@(0&<)
>>    adj
>> <@#&0 1 2 3 4@(0&<)
>>    adj A
>> --TT---T-T---┐
>> │2││0 4│4│2 3│
>> L-++---+-+----
>> 
>>    f=: 13 :'(0<y)([:<#)"1 i.#y'
>>    f
>> (0 < ]) ([: < #)"1 [: i. #
>>    f A
>> --TT---T-T---┐
>> │2││0 4│4│2 3│
>> L-++---+-+----
>> 
>>       5!:4 <'adj'
>>                         -- <
>>             -- @ -------+- #
>>       -- & -+- 0 1 2 3 4
>>       │
>> -- @ -+     -- 0
>>       L- & -+- <
>> 
>>    5!:4 <'f'
>>         -- 0
>>   ------+- <
>>   │     L- ]
>>   │          -- [:
>>   │     -----+- <
>> --+- " -+    L- #
>>   │     L- 1
>>   │
>>   │     -- [:
>>   L-----+- i.
>>         L- #
>> 
>> Linda
>> 
>> -----Original Message-----
>> From: programming-boun...@forums.jsoftware.com
>> [mailto:programming-boun...@forums.jsoftware.com] On Behalf Of Mike 
>> Day
>> Sent: Sunday, November 11, 2012 7:15 AM
>> To: programm...@jsoftware.com
>> Subject: Re: [Jprogramming] Arc consistency in J
>> 
>> I don't think you can remove the @, although you may use the cap, [: , 
>> instead,  but then you need to force the rank:
>>     ([:<(#&0 1 2 3@(0&<)))"1 A
>> +-++---+-+
>> |2||0 3|2|
>> +-++---+-+
>> 
>> I don't like using 0 1 2 3 explicitly since it presumes you know the 
>> dimension of A, so I prefer either
>>        adja =: * <@# i.@#       NB. or use caps if @ is too horrible
>>     adja A
>> +-++---+-+
>> |2||0 3|2|
>> +-++---+-+
>> 
>> or
>> 
>>     adjI =: <@I.@:*
>>     adjI A
>> +-++---+-+
>> |2||0 3|2|
>> +-++---+-+
>> 
>> I. is so useful that I've defined an I "dfn" in my Dyalog APL too!
>> 
>> As for Raul's point about D,  I understood it to represent the domains 
>> of the variables:  if there are m variables  and the domain of all 
>> their possible values is i.n,  then 1 = D{~<i,j means that variable 
>> number i may have value j .  m and n are likely to be different.  So  
>> i<D is a boolean representing the a priori values that variable i might
> have.
>> The consistency algorithm apparently examines which of these a priori 
>> values are consistent with the domains of the other variables given 
>> certain unary and binary constraints which are also inputs to the problem.
>> 
>> Michal's example had m=n which tends to mislead the casual reader!
>> 
>> I believe The m*m A array points to which constraints apply,  so 
>> 0<l=A{<i,k means that binary constraint number l applies between variables
> i and k.
>> This is why A isn't just a boolean adjacency matrix nor do the entries 
>> signify distances as they would in a weighted graph.
>> 
>> I'm puzzled that the algorithm requires each binary relation to be 
>> presented in both direct and transposed form  (this explains Michal's 
>> need to patch in a new index (to a transposed C) in the lower triangle 
>> of A for each index to a direct C in the upper triangle).  Perhaps the
> later algorithms (arc-4...
>> ?) deal with this difficulty.
>> 
>> It strikes me that for a real problem,  concise relations such as x <:
>> y,  or 2x+3y>5 can become pretty large and unwieldy C-tables, but 
>> perhaps that's unavoidable when working in the integers.
>> 
>> (The other) Mike
>> 
>> On 11/11/2012 10:16 AM, Linda Alvord wrote:
>> 
>> Mike, I think this will work as an alternative to  adj
>> 
>>      A
>> 0 0 1 0
>> 0 0 0 0
>> 2 0 0 1
>> 0 0 2 0
>>     adj
>> <@#&0 1 2 3@(0&<)
>>     adj A
>> --TT---T-┐
>> │2││0 3│2│
>> L-++---+--
>>     h
>> 0 1 2 3 <@#~ 0 < ]
>>     h A
>> --TT---T-┐
>> │2││0 3│2│
>> L-++---+--
>> 
>>   Can anyone remove the final  @  from  h  ?
>> 
>> Linda
>> 
>> 
>> -----Original Message-----
>> From:programming-boun...@forums.jsoftware.com
>> [mailto:programming-boun...@forums.jsoftware.com] On Behalf Of Raul 
>> Miller
>> Sent: Saturday, November 10, 2012 12:44 PM 
>> To:programm...@jsoftware.com
>> Subject: Re: [Jprogramming] Arc consistency in J
>> 
>> On Sat, Nov 10, 2012 at 12:16 PM, Michal 
>> D.<michal.dobrog...@gmail.com>
>> wrote:
>> 
>>> Here X is telling us to use the constraint c1 (presumably b/c C is 
>>> not
>>> shown) between the variables 1 and 3 (0 based).  Likewise, use the 
>>> transpose going the other direction (3,1).
>> Ouch, you are correct, I did not specify C.  On retesting, though, it 
>> looks like my results stay the same when I use:
>> 
>> arccon=:3 :0
>>     'D c1 X'=: y
>>     'n d'=: $D
>>     adj =: ((<@#)&(i.n)) @ (0&<)
>>     A =: adj X
>>     C=: a: , c1 ; (|:c1)
>>     ac =: > @ (1&{) @ (revise^:_) @ ((i.n)&;)
>>     ac D
>> )
>> 
>> For longer scripts like this, I really need to get into the habit of 
>> restarting J for every test.  So that probably means I should be using
> jhs.
>> 
>>> Given the structure of X, only variables 1 and 3 can possibly change.
>>> So if they are all changing something is definitely wrong.
>> This line of thinking does not make sense to me.  I thought that the 
>> requirement was that a 1 in D exists only when there is a valid 
>> relationship along a relevant arc.  If a 1 in D can also exist in the 
>> absence of any relevant arc, I am back to needing a description of the
> algorithm.
>> 
>>> Unfortunately I've run out of time to read the rest of your response 
>>> but hopefully I can get through it soon.  I've also wanted to write a 
>>> simpler version of the algorithm where the right argument of ac is 
>>> only D and it runs through all the arcs in the problem instead of 
>>> trying to be smart about which ones could have changed.
>> Yes... I am currently suspicious of the "AC-3 algorithm".
>> 
>> In the case of symmetric consistency, I think that it's unnecessary 
>> complexity, because the system converges on the initial iteration.
>> 
>> In the case of asymmetric consistency, I think that the work involved 
>> in maintaining the data structures needed for correctness will almost 
>> always exceed the work saved.
>> 
>> But I could be wrong.  I am not sure yet if I understand the 
>> underlying algorithm!
>> 
>> --
>> Raul
>> 
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
> 
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
> 
> ----------------------------------------------------------------------
> 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