I figured out one notGerund adverb, and an interesting implementation for if 
else

ar=: [: < (,'0')"_ ; ]
ar2 =: 1 : '5!:1 <''u'''

notGerund =: 1 : 0 
if. 1= L. u ar2 do. 1 return. end.
(((( < ,'0' )-:{.) *. 2=#) > ar u)
)

if =: 2 : 'if. u notGerund do. [`(u"_)@.(v"0) else. u@.(v"0)  end.'
else =:  2 : '(u"_)`(v"_)'

   0 else -: if (0>]) else +: if (0<]) i:5
_2.5 _2 _1.5 _1 _0.5 0 2 4 6 8 10

allows infinite extensions of ifs to the left, and mixed noun and verb results.
Also allows if without an else:

    +: if (0<]) i:5
_5 _4 _3 _2 _1 0 2 4 6 8 10
   -:`+: if (0<]) i:5
_2.5 _2 _1.5 _1 _0.5 0 2 4 6 8 10
   -: else +: if (0<]) i:5
_2.5 _2 _1.5 _1 _0.5 0 2 4 6 8 10
   -: else 3 if (0<]) i:5
_2.5 _2 _1.5 _1 _0.5 0 3 3 3 3 3
   2 else ] if (0<]) i:5
2 2 2 2 2 2 1 2 3 4 5



----- Original Message -----
From: Pascal Jasmin <godspiral2...@yahoo.ca>
To: "programm...@jsoftware.com" <programm...@jsoftware.com>
Cc: 
Sent: Tuesday, February 4, 2014 12:15:54 PM
Subject: Re: [Jprogramming] 'if' and 'else' operators

the :. trick from Michal is cute.

Here is how I would like to be able to call the code (note this produces 
incorrect results):

if =: 2 : '((u"_) :. ])^:([: -. [: +: [: -. v)"0'

else =: 2 : '(u"_):.(v"_)'


   3 if (0<]) i:5
_5 _4 _3 _2 _1 0 3 3 3 3 3

   +: else 3 if (0<]) i:5
_5 _4 _3 _2 _1 0 2 4 6 8 10

   0 else -: if (0>]) else +: if (0<]) i:5
_5 _4 _3 _2 _1 0 1 2 3 4 5



What I need that I can't seem to write is an adverb isGerund, that returns 0 or 
1 depending on whether m or u (the tricky part is handling both without error.

   notGerund =: 1 : '(((( < ": 1 $ 0 )-:{.) *. 2=#) > ar m)'
   3 notGerund
1

   +`- notGerund
0

   notGerundu =: 1 : '(((( < ": 1 $ 0 )-:{.) *. 2=#) > ar u 0)' NB. this 
variation is needed if u is verb.
   3: notGerundu 
1

I would like to have a single adverb that can handle both m and u (noun/gerund 
and verb) parameters.



----- Original Message -----
From: Raul Miller <rauldmil...@gmail.com>
To: Programming forum <programm...@jsoftware.com>
Cc: 
Sent: Tuesday, February 4, 2014 9:43:18 AM
Subject: Re: [Jprogramming] 'if' and 'else' operators

if=: 2 :0
   u"_`(v"_)
)

else=: 2 :0
  v"_`(0{m)@.((1{m)`:6)
)

   ('O' if (=0:) else ('<' if (<0:) else '>'))"0 i:5
<<<<<O>>>>>

Do you also want to see an implementation for your alternate proposal?

Thanks,

-- 
Raul

On Tue, Feb 4, 2014 at 3:48 AM, Michal Wallace <michal.wall...@gmail.com> wrote:
>        ('O' if (=0:) else ('<' if (<0:) else '>'))"0 i:5
>     <<<<<O>>>>>
>
> There are nicer ways to make this output,
> but how would you code 'if' and 'else' above?
>
> Or... 'if'/'then'/'else' below, if you prefer?
>
>     a =: assert
>     a   4 1 0 2 4  -:   if (<0:) then (*: else +:)  i:2
>     a   4 1 0 2 4  -:  (if (<0:) then (*: else +:)) i:2
>     a  (if ] then (| else -.)) 1 1 0 0 1 0 1 0
>     a   if ] then (| else -.)  1 1 0 0 1 0 1 0
>
> My versions are here:
>
>    https://github.com/tangentstorm/tangentlabs/blob/master/j/syntax.ijs
>
> Thoughts? :)
>
> -Michal
> ----------------------------------------------------------------------
> 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