Could you clarify this statement "I'm still interested in the guard
conjunction that I don't understand why it doesn't work"?

I am not sure what you mean by "why it doesn't work".

But let's say that y was 1 2 3 and that sideff y was 14. In that case,
these would be equivalent statements:

if. -. (2 = sideff y)"_ ^: (*./ y) 1 do. 'bad' return. end.
if. -. (2 = sideff 1 2 3)"_ ^: (*./ 1 2 3) 1 do. 'bad' return. end.
if. -. (2 = 14)"_ ^: (6) 1 do. 'bad' return. end.
if. -. (0)"_ ^: (6) 1 do. 'bad' return. end.
if. -. (0)"_ (0)"_ (0)"_ (0)"_ (0)"_ (0)"_ (1) do. 'bad' return. end.
if. -. 0 do. 'bad' return. end.
if. 1 do. 'bad' return. end.
'bad' return.

You might want to try walking through a similar exercise with sideff bind y

Thanks,

-- 
Raul



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
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to