> An improvement I'm not sure is possible would be to modify controlA
and/or
> ifC to not access y, ie. be tacit.
Sure it is; as far as I know, an explicit adverb (or verb) always can be
rewritten tacitly, in theory.
controlA_z_ =: 1 : 0
flag1_z_ =: 1
o=. u y
flag1_z_ =: 0
o
)
ifC=: 1 : 'if. flag1_z_ do. u y else. y end.'
( test=: +: ifC )
+: (1 : 'if. flag1_z_ do. u y else. y end.')
test controlA a=. 1 2 3
2 4 6
test a=. 1 2 3
1 2 3
test@:(+/%#) 1 2 3
2
test@:(+/%#) controlA 1 2 3
4
test (+/%#) controlA 1 2 3
2
In practice, it can be easy,
ifC=. ^: (". @: ('flag1_z_'"_))
( test=: +: ifC )
+:^:(".@:('flag1_z_'"_))
or it can be difficult but not nearly as difficult as it should be (so to
speak),
Force=. (0:`)(,^:) NB. May the Force be with you
train=. (<'`:') (Force (&6))
an=. <@:((,'0') ,&< ]) NB. Atomizing a noun
core=. ([ ".@:('flag1_z_=: 0'"_))@:(train@:(0&{ , an@:(1&{::)))@:([
".@:('flag1_z_=: 1'"_))
controlA=. `'' (&,) (@:(,&<)) (core@:) NB. A train of adverbs
test controlA a=. 1 2 3
2 4 6
test a=. 1 2 3
1 2 3
test@:(+/%#) 1 2 3
2
test@:(+/%#) controlA 1 2 3
4
test (+/%#) controlA 1 2 3
2
controlA=. (`'' (&,) (@:(,&<)) ((([ ".@:('flag1_z_=: 0'"_))@:((((<'`:')
(0:`)(,^:)&6))@:(0&{ , <@:((,'0') ,&< ])@:(1&{::)))@:([ ".@:('flag1_z_=:
1'"_)))@:))
NB. The adverb as a long self-contained one-liner (fixed manually to
avoid the linear representation bug)
test controlA a=. 1 2 3
2 4 6
test a=. 1 2 3
1 2 3
test@:(+/%#) 1 2 3
2
test@:(+/%#) controlA 1 2 3
4
test (+/%#) controlA 1 2 3
2
On Fri, Sep 13, 2013 at 2:19 PM, Pascal Jasmin <[email protected]>wrote:
> Thanks very much.
>
> In terms of usefulness,
> ifC=: 1 : 'if. flag1_z_ do. u y else. y end.'
> pD =: smoutput ifC
> test=: +: ifC
>
> test controlA a=. 1 2 3
> 2 4 6
> test a=. 1 2 3
> 1 2 3
>
> The pD verb can produce verbose output for debugging only when asked.
>
> 2 points to a single line:
> 1. eliminates 11 lines of irritating clutter that I don't want to see.
> 2. If I or someone else copies just the definition without the
> initialization variable into a new project, in someone's lifetime, I/they
> will get a domain error, and will either hate the function or their lives
> because of it. I might make this error more likely to occur by
> inadvertantly inserting code between the function and the initialization.
>
> An improvement I'm not sure is possible would be to modify controlA and/or
> ifC to not access y, ie. be tacit.
>
> ----- Original Message -----
> From: Raul Miller <[email protected]>
> To: General forum <[email protected]>
> Cc:
> Sent: Friday, September 13, 2013 1:25:06 PM
> Subject: Re: [Jgeneral] Bug in adverb define
>
> It's not at all clear to me why doing this kind of thing on "one line"
> is useful.
>
> That said, this example of yours:
>
> flag1_z_ =: 0 [ controlA_z_ =: 1 : ('flag1_z_ =: 1';'o=. u
> y';'flag1_z_ =: 0';'o')
>
> has this grammar:
>
> name =: noun verb name =: noun conjunction noun
>
> Which, simplifies to
>
> name =: noun verb adverb
>
> In other words, you are executing controlA with u defined as [ which
> then simplifies to
>
> name =: noun verb
>
> and that's just bad grammar. A simple transformation which would make
> it grammatically correct would be:
>
> name =: verb noun
>
> and... projecting this back into your original sentence, it would become
>
> flag1_z_ =: ([ controlA_z_ =: 1 : ('flag1_z_ =: 1';'o=. u
> y';'flag1_z_ =: 0';'o')) 0
>
> However, since I have no idea what you are trying to accomplish, I
> have no idea if this is relevant to your efforts.
>
> FYI,
>
> --
> Raul
>
> On Fri, Sep 13, 2013 at 1:09 PM, Pascal Jasmin <[email protected]>
> wrote:
> > thank you. I'm still not able to combine into one line (which IIUC can
> be done with verb defines)
> > flag1_z_ =: 0 [ controlA_z_ =: 1 : ('flag1_z_ =: 1';'o=. u y';'flag1_z_
> =: 0';'o')
> >
> >
> > btw, The dyad version define is:
> > (flag1_z_ =: 0) [ controlA_z_ =: 1 : ('flag1_z_ =: 1';'o=. u
> y';'flag1_z_ =: 0';'o';':';'flag1_z_ =: 1';'o=. x u y';'flag1_z_ =: 0';'o')
> >
> >
> >
> >
> > ----- Original Message -----
> > From: Don Guinn <[email protected]>
> > To: General forum <[email protected]>
> > Cc:
> > Sent: Friday, September 13, 2013 12:18:34 PM
> > Subject: Re: [Jgeneral] Bug in adverb define
> >
> > Need to add parens.
> >
> > controlA_z_ =: 1 : ('flag1_z_ =: 1';'o=. u y';'flag1_z_ =: 0';'o')
> >
> >
> > On Fri, Sep 13, 2013 at 9:18 AM, Pascal Jasmin <[email protected]
> >wrote:
> >
> >> The following in a script should work according to
> >> http://www.jsoftware.com/help/dictionary/dicth.htm
> >> flag1_z_ =: 0
> >> controlA_z_ =: 1 : 'flag1_z_ =: 1';'o=. u y';'flag1_z_ =: 0';'o'
> >>
> >> It results in a syntax error script in J7. The syntax error can be
> >> eliminated by changing 1 : to 3 :
> >>
> >> The adverb (and definition) works as a 4 line definition. Its purpose
> is
> >> to send control flags to a verb which changes its behaviour if called
> with
> >> the adverb. The importance of getting it on one line is that supporting
> >> dyads would take a multiline definition 10 lines with the ending ), and
> its
> >> the type of utility function that can be cloned to control2A control3A
> and
> >> so, single line definitions are more reusable.
> >>
> >> The multiline version is:
> >> controlA_z_ =: 1 : 0
> >> flag1_z_ =: 1
> >> o=. u y
> >> flag1_z_ =: 0
> >> o
> >> )
> >>
> >> Ideally I'd like to be able to write a definition line such as:
> >>
> >> flag1_z_ =: 0 [ controlA_z_ =: 1 : 'flag1_z_ =: 1';'o=. u y';'flag1_z_
> =:
> >> 0';'o'
> >>
> >> (which does load if '1 :' changed to '3 :')
> >> ----------------------------------------------------------------------
> >> 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