that kind of works. It turns the expression from a noun to a fork. I'm still interested in the guard conjunction that I don't understand why it doesn't work.
thanks. ----- Original Message ----- From: Raul Miller <[email protected]> To: Programming forum <[email protected]> Cc: Sent: Wednesday, January 15, 2014 12:37:08 AM Subject: Re: [Jprogramming] maybe a bug in short circuiting. Help with a guard structure Oops, you are correct, and I was wrong. I should have tested against an example. Anyways, a fix that retains your result pattern would be to replace sideff y with sideff bind y (this will defer execution until you receive the 1, which you will then ignore). I might be able to some up with something more elegant, but I'd want test cases to play with before I make further mistakes. Thanks, -- Raul On Wed, Jan 15, 2014 at 12:21 AM, Pascal Jasmin <[email protected]> wrote: > the 1 at the end does something useful: m"_ ^: n 1 will return 1 if n is 0 > or m is 1. > > The overall pattern seems very common to me: "if query1 has items then if > not also subquery is true signal error and exit function" > > I understand the confusion over my using y, but I was mostly trying to > illustrate noun expressions, and I understand now that it may not be possible. > > My main question was in the second part, and asking why the 'guard' > conjunction doesn't work. > > > ----- Original Message ----- > From: Raul Miller <[email protected]> > To: Programming forum <[email protected]> > Cc: > Sent: Tuesday, January 14, 2014 11:38:12 PM > Subject: Re: [Jprogramming] maybe a bug in short circuiting. Help with a > guard structure > > Yes. > >> if. -. (2 = sideff y)"_ ^: (*./ y) 1 do. 'bad' return. end. > > J needs to resolve the contents of the parenthesis to a single entity > (noun, verb, adverb or conjunction). > > In this case I think you want a verb, which would be controlled by ^: > > Also, I do not see that that "_ does anything useful for you. > > So, to accomplish what I think you are describing, I would get rid of > the 'y' in the places it currently exists on that line. That would > give you verb phrases inside both of the parenthesis where currently > you have noun phrases. I would also delete the "_ > > Then, I would replace that 1 with y. The 1 currently does nothing > useful and you want y as the argument for both of your verb phrases. > > Does this line of reasoning make sense to you? > > Thanks, > > -- > Raul > > > On Tue, Jan 14, 2014 at 11:13 PM, Pascal Jasmin <[email protected]> > wrote: >> the following attempts to code the one line pattern with one less if. : >> if. test1 y do. if. -. test2 x do. 'test2 failed' return. end. end. >> >> The problem is that the verb sideff is called even if it shouldn't be. >> >> test=: 3 : 0 >> if. -. (2 = sideff y)"_ ^: (*./ y) 1 do. 'bad' return. end. >> ) >> sideff =: 3 : 'a=: +/ y' >> >> >> test 1 2 >> bad >> a >> 3 >> test 1 1 >> a >> 2 >> test 1 0 >> a >> 1 >> >> is this just due to nature of parentheses, and the interpreter needing to >> parse what is on other side of "_ >> >> >> This works as a one liner including shortcircuiting out the side effect when >> appropriate : >> >> 3 (2 = sideff)@:[ ^: (* 0) 1 >> 1 >> 3 (2 = sideff)@:[ ^: (* 1) 1 >> 0 >> 2 (2 = sideff)@:[ ^: (* 1) 1 >> 1 >> >> but I don't understand why this fails: >> >> guard =: 2 : 0 >> : >> (u@:[)^: (v y) 1 >> ) >> >> 3 (2 = sideff) guard * 1 >> 0 >> 2 (2 = sideff) guard * 1 NB. should be 1 >> 0 >> >> is there a way to define guard to properly short circuit and give the right >> answer? Is it impossible if the u argument evaluates to a noun as it was >> used in first example? >> ---------------------------------------------------------------------- >> 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
