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