I am not sure I can answer your question about guard, but I was able to get
trace to work (after I loaded the exact filename) by appending "__" to the
names as shown below. Maybe the trace will shed some light for you. I have
to go out for a while now.

load jpath '~addons/general/misc/trace.ijs'
   trace '2 (2 = sideff__) guard__ *  1'
 --------------- 5 Trident ----
 2
 =
 sideff__
 2 = sideff__
 --------------- 8 Paren ------
 (
 2 = sideff__
 )
 2 = sideff__
 --------------- 4 Conj -------
 2 = sideff__
 2 : (':'; '(u@:[)^: (v y) 1')
 *
 (2 = sideff__) (2 : (':'; '(u@:[)^: (v y) 1')) *
 --------------- 2 Dyad -------
 2
 (2 = sideff__) (2 : (':'; '(u@:[)^: (v y) 1')) *
 1
  ------------------------------
  3 : 'a=: +/ y'
  1
  1
  ==============================
 0
 ==============================
0



On Wed, Jan 15, 2014 at 1:08 AM, Pascal Jasmin <godspiral2...@yahoo.ca>wrote:

> 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 <rauldmil...@gmail.com>
> To: Programming forum <programm...@jsoftware.com>
> 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 <godspiral2...@yahoo.ca>
> 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 <rauldmil...@gmail.com>
> > To: Programming forum <programm...@jsoftware.com>
> > 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 <godspiral2...@yahoo.ca>
> 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
>



-- 
(B=) <-----my sig
Brian Schott
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to