A test of the tacit solutions provided so far follows,

   NB. f0, my version...

   an=. <@:((,'0') ,&< ])
   Cloak=. ((5!:1)@:<'Cloak')Cloak=. (0:`)(,^:)
   train=. (Cloak <'`:')&6  NB. `:6 verbalized

   ( f0=. train@:({.@:(0&({::)) ; an@:>@:{:) f. )
,^:(0:``:)&6@:({.@:(0&({::)) ; <@:((,'0') ,&< ])@:>@:{:)


   NB. f1, Raul's version
   fe=: 13 : 0
  '0:';<'@:';<((0;0){::y);<(,'"');<((,'0');1{::y);<((,'0');_)
)

   ( f1=. ]^:] fe f. )
]^:] ('0:' ; [: < '@:' ; [: < ((0;0) {:: ]) ; [: < (,'"') ; [: <
(<(,'0');_) ;~ (,'0') ; 1 {:: ])

   NB. f2, Pascal's version...

Pascal, if you are listening, I had problems collecting the definitions
to produce your tacit solution.  Can you do the honors?


   NB. f3, Linda's version...

   ( f3=: 13 :'".(>0{>0{y),":i.$>1{y' )
[: ". ([: > 0 { [: > 0 { ]) , [: ": [: i. [: $ [: > 1 { ]



   ( Y=. +:`*:;i.5 )  NB. Original sample data
┌───────┬─────────┐
│┌──┬──┐│0 1 2 3 4│
││+:│*:││         │
│└──┴──┘│         │
└───────┴─────────┘

   f0 Y
0 2 4 6 8
   f1 Y
0 2 4 6 8
   f3 Y
0 2 4 6 8


   ( Y=. (+/)`*:;i.5 )
┌────────────┬─────────┐
│┌───────┬──┐│0 1 2 3 4│
││┌─┬───┐│*:││         │
│││/│┌─┐││  ││         │
│││ ││+│││  ││         │
│││ │└─┘││  ││         │
││└─┴───┘│  ││         │
│└───────┴──┘│         │
└────────────┴─────────┘

   f0 Y
10
   f1 Y
10

   f3 Y
|domain error: f3
|       f3 Y
|[-0]

   ( Y=. (+:&>`*:;<5;6) )
┌───────────────┬─────┐
│┌──────────┬──┐│┌─┬─┐│
││┌─┬──────┐│*:│││5│6││
│││&│┌──┬─┐││  ││└─┴─┘│
│││ ││+:│>│││  ││     │
│││ │└──┴─┘││  ││     │
││└─┴──────┘│  ││     │
│└──────────┴──┘│     │
└───────────────┴─────┘

   f0 Y
10 12
   f1 Y
|length error: f1
|       f1 Y
|[-3]

   f3 Y
|domain error: f3
|       f3 Y
|[-0]




On Mon, Feb 2, 2015 at 1:23 AM, 'Pascal Jasmin' via Programming <
[email protected]> wrote:

> a 3rd tacit (and some "almost tacit") version
>
> anV =: <@:((,'0') ,&< ])  NB. your an
> an =: 1 : '<@:((,''0'') ,&< ]) m'  NB. as adverb
> w =: @.0 2   NB. result of 0 2 agenda
> c2da =: 1 : ( 'a =. (m ,'' u'') label_. 1 : (''u  1 :'' , quote a)')
> tie =. '`'c2da
>
> JVERSION
> Engine: j701/2011-01-10/11:25
> Library: 8.02.07
> Qt IDE: 1.1.2/5.3.0
> Platform: Win 64
>
>
> 1000 st every '+:*:(anV i.5) tie tie 0 2 agenda';'u +:`*:;i.5';'(+:`*: , (
> anV i.5) ) w';'(+:`*: , (i.5) an) w'
>
> ┌────────────────────────────────┬─────┬──────────┬─────────┐
> │+:*:(anV i.5) tie tie 0 2 agenda│13696│3.08835e_5│0.422981 │
> ├────────────────────────────────┼─────┼──────────┼─────────┤
> │u +:`*:;i.5                     │6656 │1.64672e_5│0.109606 │
> ├────────────────────────────────┼─────┼──────────┼─────────┤
> │(+:`*: , ( anV i.5) ) w         │4608 │4.70272e_6│0.0216701│
> ├────────────────────────────────┼─────┼──────────┼─────────┤
> │(+:`*: , (i.5) an) w            │5888 │7.76736e_6│0.0457342│
> └────────────────────────────────┴─────┴──────────┴─────────┘
>
>
>
> ________________________________
> From: Jose Mario Quintana <[email protected]>
> To: Programming forum <[email protected]>
> Sent: Sunday, February 1, 2015 11:16 PM
> Subject: Re: [Jprogramming] conjunction in tacit verb
>
>
> So far two main tacit solutions have been shown.  The first, bending the
> rules,
>
>    an=. <@:((,'0') ,&< ])
>    Cloak=. ((5!:1)@:<'Cloak')Cloak=. (0:`)(,^:)
>    train=. (Cloak <'`:')&6  NB. `:6 verbalized
>
>    ( v=. train@:({.@:(0&({::)) ; an@:>@:{:) f. )
> ,^:(0:``:)&6@:({.@:(0&({::)) ; <@:((,'0') ,&< ])@:>@:{:)
>
> The second, following the rules,
>
>    fe=: 13 : 0
> '0:';<'@:';<((0;0){::y);<(,'"');<((,'0');1{::y);<((,'0');_)
> )
>
>    ( u=. ]^:] fe f. )
> ]^:] ('0:' ; [: < '@:' ; [: < ((0;0) {:: ]) ; [: < (,'"') ; [: <
> (<(,'0');_) ;~ (,'0') ; 1 {:: ])
>
> Let us compare them,
>
>    Y=. +:`*:;i.5
>
>    (u -: v) Y
> 1
>
>    sp=. 7!:5@:<
>    sp&> ;:'u v'
> 2432 1920
>
>    st=. (, */&.:>@:(1 2&{))@:(] ; 7!:2@:] ; 6!:2)
>    10000 st&> 'u Y' ; 'v Y'
> ┌───┬────┬──────────┬──────────┐
> │u Y│2624│1.49229e_5│0.0391576 │
> ├───┼────┼──────────┼──────────┤
> │v Y│1920│4.96943e_6│0.00954131│
> └───┴────┴──────────┴──────────┘
>
> By the way, Patriots 28 Seahawks 24, a fine example that bending the rules
> pays off ;)
>
>
>
>
>
> On Sun, Feb 1, 2015 at 4:07 PM, Jose Mario Quintana <
> [email protected]> wrote:
>
> > "Or, you can use ]^:]"
> >
> > Sneaky?  (See,
> > http://www.jsoftware.com/pipermail/programming/2013-January/031234.html
> > and
> > http://www.jsoftware.com/pipermail/programming/2013-January/031236.html
> > )
> >
> > "
> > But maybe it's also easy enough to use J's parser and not bother with
> > tacit for this kind of exercise?
> > "
> >
> > Maybe, but the question that started this thread was,
> > "Is it possible to define f tacitly?"
> >
> >
> >
> > On Sun, Feb 1, 2015 at 3:38 PM, Raul Miller <[email protected]>
> wrote:
> >
> >> Or, you can use ]^:]
> >>
> >> It's not really that hard.
> >>
> >> http://www.jsoftware.com/help/dictionary/d202n.htm says:
> >>
> >>   u^:(   v1`v2)y ↔ u^:(v1 y) (v2 y)
> >>
> >> So let's make v1 be 0: and v2 be a data structure which represents our
> >> entire calculation:
> >>
> >>    ]^:] 0:`(+:@:(0 1 2 3 4"_))
> >> 0 2 4 6 8
> >>
> >> Now all we need is a verb which transforms
> >>    (+:`*:;i.5)
> >> to
> >>    0:`(+:@:(0 1 2 3 4"_))
> >>
> >> It's straightfoward to do this explicitly.
> >>
> >> Let's define a test:
> >>
> >> ex=: +:`*:;i.5
> >> assert 0:`(+:@:(0 1 2 3 4"_)) -: fe ex
> >>
> >> Now we just need to define fe so that the above script does not throw
> >> an error. So take a look at what 0:`(+:@:(0 1 2 3 4"_)) looks like and
> >> transcribe that to code:
> >>
> >> fe=:3 :0
> >>  '0:';<'@:';<((0;0){::y);<(,'"');<((,'0');1{::y);<((,'0');_)
> >> )
> >>
> >> Testing:
> >>
> >>    ]^:] fe ex
> >> 0 2 4 6 8
> >>
> >> Now.. that expression for fe is messy, and a little tedious to write,
> >> but if you don't mind a little bit of trial and error and
> >> investigation while you work through whatever uncertainties you have
> >> about what you are seeing, you can do it.
> >>
> >> And converting it to tacit can be done like this:
> >>
> >> fe=:13 :0
> >>  '0:';<'@:';<((0;0){::y);<(,'"');<((,'0');1{::y);<((,'0');_)
> >> )
> >>
> >> (And then look at the definition of fe using linear representation.)
> >>
> >> Oh, but that's cheating!
> >>
> >> Um... why?
> >>
> >> It's not, not really. You learn from whatever interests you.
> >>
> >> That said, it *can* be an interesting exercise to construct sensibly
> >> named concepts for building that kind of data structure.
> >>
> >> But maybe it's also easy enough to use J's parser and not bother with
> >> tacit for this kind of exercise?
> >>
> >> Thanks,
> >>
> >> --
> >> Raul
> >>
> >>
> >> On Sun, Feb 1, 2015 at 3:09 PM, Jose Mario Quintana
> >> <[email protected]> wrote:
> >> > "
> >> > The agenda trick doesn't quite solve the problem though due to train
> >> > formation rules:
> >> > "
> >> >
> >> > Actually, when evaluating atomic representations, gerunds, etc.
> whatever
> >> > one can accomplish using train (`:6) one can accomplish it using
> agenda
> >> > (@.) as well (and vice versa).
> >> >
> >> >    JVERSION
> >> > Installer: j602a_win.exe
> >> > Engine: j701/2011-01-10/11:25
> >> > Library: 6.02.023
> >> >
> >> >    ( agenda=. Cloak <'@.' )  NB. @. verbalized
> >> > ,^:(0:`@.)
> >> >
> >> >    u=. agenda&0 1@:({.@:(0&({::)) ; an@:>@:{:) f.
> >> >    u (+:`*:;i.5)
> >> > 0 2 4 6 8
> >> >
> >> > Alternatively,
> >> >
> >> >    caravan=. agenda&0@:<
> >> >
> >> >    u=. caravan@:({.@:(0&({::)) ; an@:>@:{:) f.
> >> >    u (+:`*:;i.5)
> >> > 0 2 4 6 8
> >> >
> >> > I find train more intuitive but agenda more suitable for heavy duty.
> >> >
> >> >
> >> > On Fri, Jan 30, 2015 at 9:30 AM, Joe Bogner <[email protected]>
> >> wrote:
> >> >
> >> >> I hear a faint whisper calling me to this dark side...
> >> >>
> >> >> I have seen these posts[1] when I had just started using J and didn't
> >> >> understand them. I went down the rabbit hole for a few hours this
> >> >> morning
> >> >>
> >> >> The first post in the list was particularly enlightening
> >> >>
> >> >> NB. was gfy in Dan's post
> >> >> an=. <@:((,'0') ,&< ])
> >> >>
> >> >> NB. 2 + i.5
> >> >>    ((an 2);'+';(an i. 5);'*:') @. (0 1 2)
> >> >> 2 3 4 5 6
> >> >>
> >> >> NB. Let's square everything
> >> >>    ((an 2);'+';(an i. 5);'*:') @. (3 0 1 2)
> >> >> 4 9 16 25 36
> >> >>
> >> >> NB. You can even see syntax errors, which can help debugging
> >> >> ((an 2);'+';(an i. 5);'*:') @. (0 1 1 1)
> >> >> |syntax error
> >> >> |       2+++
> >> >>
> >> >> Let's get some more syntax errors:
> >> >>
> >> >> ((an 2);'+';(an i. 5);'*:') @. (3#(3 0 1 2))
> >> >> |syntax error
> >> >> |       *:*:*:2 2 2+++0 1 2 3 4 0 1 2 3 4 0 1 2 3 4
> >> >>
> >> >>
> >> >> NB. +: +: +: +: (2+i.5)
> >> >> ((an 2);'+';(an i. 5);'+:') @. ((4#3),(0 1 2))
> >> >> 32 48 64 80 96
> >> >>
> >> >>
> >> >> NB. adverbs too
> >> >>    ('+';'/';(an i.5)) @. (0 1 2)
> >> >> 10
> >> >>
> >> >> add1=.1&+
> >> >> ((ar 'add1');(an (2 4 6))) @. (0 1)
> >> >> 3 5 7
> >> >>
> >> >> And then coming back around to my original question:
> >> >>
> >> >> ((ar 'add1');'+:';(an (2 4 6))) @. (0 1 0 2)
> >> >> 7 11 15
> >> >>
> >> >> versus this monstrosity (beware of linebreaks)
> >> >> gapply=:([: >@:}. (([: }. >&{.) ; >@:{.@:>@:{. 128!:2
> >> >> >@:}.)^:({.@:$@:>@:{.))
> >> >>
> >> >> gapply ('1&+';'+:';'1&+');(2 4 6)
> >> >> 7 11 15
> >> >>
> >> >> The agenda trick doesn't quite solve the problem though due to train
> >> >> formation rules:
> >> >>
> >> >> gapply ('1&+';'+:';'1&+';'1&+');(2 4 6)
> >> >> 8 12 16
> >> >>
> >> >> ((ar 'add1');'+:';(an (2 4 6))) @. (0 1 0 0 2)
> >> >> 9 13 17
> >> >>
> >> >> You train verb worked well though as an alternative
> >> >>
> >> >> Thank you!
> >> >>
> >> >> [1] -
> >> >>
> http://www.jsoftware.com/pipermail/programming/2013-March/031883.html
> >> >> [2] -
> >> >>
> >> http://www.jsoftware.com/pipermail/programming/2013-January/031236.html
> >> >>
> >> >> On Thu, Jan 29, 2015 at 5:55 PM, Jose Mario Quintana
> >> >> <[email protected]> wrote:
> >> >> > "Is it possible to define f tacitly?"
> >> >> >
> >> >> > J tacit programming is Turing complete; thus, any verb can be
> defined
> >> >> > tacitly.  It can be difficult sometimes but this case is easy... If
> >> one
> >> >> is
> >> >> > prepared to venture to the dark side.
> >> >> >
> >> >> >
> >> >> >    an=. <@:((,'0') ,&< ])
> >> >> >
> >> >> >    NB. Dark side of the force...
> >> >> >
> >> >> >    Cloak=. ((5!:1)@:<'Cloak')Cloak=. (0:`)(,^:)
> >> >> >    ( train=. (Cloak <'`:')&6 )  NB. `:6 verbalized
> >> >> > ,^:(0:``:)&6
> >> >> >
> >> >> >    v=. train@:({.@:(0&({::)) ; an@:>@:{:) f.
> >> >> >
> >> >> >
> >> >> >    v (+:`*:;i.5)
> >> >> > 0 2 4 6 8
> >> >> >
> >> >> >
> >> >> > On Thu, Jan 29, 2015 at 1:20 PM, Joe Bogner <[email protected]>
> >> wrote:
> >> >> >
> >> >> >> Is it possible to define f tacitly?
> >> >> >>
> >> >> >> f=: 3 : '({.@:>@:{.y)`:0 (>@:}.y)'
> >> >> >> f (+:`*:;i.5)
> >> >> >>
> >> >> >> 0 2 4 6 8
> >> >> >>
> >> >> >> It's meant to take the first gerund from a box that contains a
> list
> >> of
> >> >> >> gerunds and data to operate on
> >> >> >>
> >> >> >> It's an odd circumstance that needed it. I could probably rework
> the
> >> >> >> logic but now I'm curious if it can be done
> >> >> >>
> >> >> >> Some things I tried:
> >> >> >>
> >> >> >> a=:(+:`*:;i.5)
> >> >> >>
> >> >> >> f1=:{.@:>@:{.
> >> >> >>    f1 a
> >> >> >> ┌──┐
> >> >> >> │+:│
> >> >> >> └──┘
> >> >> >>
> >> >> >> f2=:>@:}.
> >> >> >>   f2 a
> >> >> >> 0 1 2 3 4
> >> >> >>
> >> >> >>
> >> >> >> Tried various version of combining f1 and f2 to no avail
> >> >> >>
> >> >> >> This works:
> >> >> >>
> >> >> >>    g`:0 f2 a [ g=. f1 a
> >> >> >> 0 2 4 6 8
> >> >> >>
> >> >> >> I'm thinking there might be a way to do it without the assignment?
> >> >> >>
> >> ----------------------------------------------------------------------
> >> >> >> 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
> ----------------------------------------------------------------------
> 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