I would rather use strand notation (a multiple adverb).  Using Jx and the
adverb lambda mentioned in  [0] is straightforward:

   sf=. [: u0 u1 u2 (u0@[ u1 u2@]) lambda
   +: + -:sf
+:@[ + -:@]

   3 4 +: + -:sf 2 4
7 10

   type'sf'
┌──────┐
│adverb│
└──────┘

[0] [Jprogramming] Can whatever be written tacitly?
    http://www.jsoftware.com/pipermail/programming/2015-February/041130.html





On Thu, Dec 10, 2015 at 1:58 PM, Joe Bogner <joebog...@gmail.com> wrote:

> Oh, that is clever but not too mysterious. I also went down the path
> of trying to get the linear representation of u but got stuck because
> 5!:5 expects a name. I didn't think to assign a local name.
>
> This was also cool and the piece I was missing to gerundify u
>
> (+: + -:) (1 : '0{:: u`[')
> ┌─┬─────────┐
> │3│┌──┬─┬──┐│
> │ ││+:│+│-:││
> │ │└──┴─┴──┘│
> └─┴─────────┘
>
>
>
> Thanks
>
> On Thu, Dec 10, 2015 at 1:35 PM, Raul Miller <rauldmil...@gmail.com>
> wrote:
> > Here's a draft implementation of what I think you mean by a "smart fork":
> >
> > NB. draft
> > sfork=:1 :0
> >   impl=. 0 {:: u`-
> >   if. (<,'3')-:{.impl do.
> >     d=. 5!:1@<
> >     e=. 5!:0
> >     '`a b c'=. 1 {:: impl
> >     (d'a')e@[ (d'b')e (d'c')e@]
> >   end.
> > )
> >
> > Example use:
> >    (+-*)sfork
> > +@[ - *@]
> >
> > Hopefully that's not too mysterious?
> >
> > Basically, it's taking the gerund of its argument (which it assumes is
> > a verb or an atomic representation of a verb), and if that represents
> > a fork, it's extracting the three verbs from the fork and slapping a
> > @[ on the left tine and a @] on the right tine.
> >
> > Anyways, I've occasionally also itched for something like this. But
> > the definition is big enough that I never bother.
> >
> > Thanks,
> >
> > --
> > Raul
> >
> >
> > On Thu, Dec 10, 2015 at 1:15 PM, Joe Bogner <joebog...@gmail.com> wrote:
> >> Interesting. I'm not sure if M is worth it over @] due to potential
> >> naming conflicts and ambiguity in the code .@] is very clear
> >>
> >> It got me thinking that it might be interesting (albeit probably not
> >> overly useful) to have a 'smart fork' adverb that could figure out
> >> that its arguments are monadic and bind them appropriately
> >>
> >> This starts to show what I mean
> >> fork=:(2 : 'u@[ + v@]')
> >>
> >> 3 4 (+: fork -:) 2 4
> >> 7 10
> >>
> >> The + would need to be extracted, so it would need to be
> >>
> >> 3 4 (+: + -:) fork 2 4
> >>
> >> I don't think that's possible without using gerunds..
> >>
> >> fork=: (1 :'(0{:: u);''@'';''['';(1&{::u);(2{:: u);''@'';'']''') (1 :
> 'u `:6')
> >>
> >> +:`+`-: fork
> >> +:@[ + -:@]
> >>
> >> 3 4 +:`+`-: fork 2 4
> >> 7 10
> >>
> >> fork could be enhanced to detect whether the tines are monadic and
> >> only apply the @[ and @] if so
> >>
> >> not sure how useful it is, but fun to play with
> >>
> >>
> >>
> >>
> >> On Thu, Dec 10, 2015 at 12:11 PM, 'Pascal Jasmin' via Programming
> >> <programm...@jsoftware.com> wrote:
> >>> Here is another approach to simplifying J and meeting dyadic J goals
> without verb definitions:
> >>>
> >>> M =: @]
> >>>
> >>>
> >>>      3 4 (+:M~ + -:M) 2 4
> >>> 7 10
> >>>   (+: M~ + -: M) 2 4
> >>> 5 10
> >>>
> >>>
> >>>
> >>> ~ (swap) basically works like @[ on a monad that is defined to ignore
> x rather than return error.
> >>>
> >>> M or M~ is easier to type than @:] or @:[ too.
> >>>
> >>>
> >>> T =: &{(>@)
> >>> NB. double adverb version of @:
> >>> at =: 1 : 'u  1 :''2 : ''''u (v@:) '''' u'''
> >>>
> >>>
> >>>
> >>>
> >>>   3 2 (1 T M~ +     0 1 T M +: at) 2 3 4
> >>> 6 8
> >>>
> >>> ----- Original Message -----
> >>> From: Jose Mario Quintana <jose.mario.quint...@gmail.com>
> >>> To: Programming forum <programm...@jsoftware.com>
> >>> Sent: Thursday, December 3, 2015 11:04 AM
> >>> Subject: Re: [Jprogramming] dyadic J
> >>>
> >>> Pascal wrote:
> >>>
> >>> "There is a addon called general/primitives that provides shadow names
> for
> >>> everything."
> >>>
> >>> However, trying to provide a shadow name for $: is futile.
> >>>
> >>>
> >>> Pascal wrote:
> >>>
> >>> 'A recent point of conversion of mine is that u@:v is both easier to
> read
> >>> and edit/expand and easier to see subresults by cutting out parts of
> an @
> >>> train "s@t@u@v" even if its u@:(v) compared to [: u v.'
> >>>
> >>> Welcome to a very exclusive club ;)
> >>>
> >>>
> >>> Linda wrote:
> >>> "
> >>> Pascal and others. I am curious to know if you find tacit code easy to
> read.
> >>>
> >>> cr=:([ = [: +/ [: |: #~ #: [: i. ^) #"2 #~ #: [: i. ^
> >>> divy=:([: ,. [: <"1 '*' $~ ] ,~ [: <. %) , [: < '*' $~ [ - ] * [: <. %
> >>>
> >>> Those two tacit lines seem hard to translate for me. Instead I find the
> >>> expressions below are quite easy to follow.
> >>>
> >>>    cr=: 13 :'(x= +/ |:(y#x)#:i.x^y) #"2 (y#x)#:i.x^y'
> >>>    divy=: 13 :'(,.<"1((<.x%y),y)$''*''),<(x-y*<.x%y)$''*'''
> >>> "
> >>>
> >>> I submit that it is a matter of familiarity.  Granted, forum members
> are
> >>> likely more familiar with explicit rather than tacit reading and
> writing
> >>> (then again, most programmers are more familiar with one element at a
> time
> >>> as opposed to array processing).
> >>>
> >>> Personally, armed with the boxed representation of a verb, I can
> typically
> >>> see effortlessly how the data flows given a tacit verb and its
> >>> argument(s).  This does not surprise me since the interpreter’s
> >>> representation of a verb is closely related to the boxed
> representation (if
> >>> I recall correctly).
> >>>
> >>> Moreover, tacit forms facilitate the manual, or automatic, symbolic
> >>> manipulation and simplification of tacit forms.  For example,
> >>>
> >>>    cr=:([ = [: +/ [: |: #~ #: [: i. ^) #"2 #~ #: [: i. ^
> >>>
> >>>    cr
> >>> ([ = [: +/ [: |: #~ #: [: i. ^) #"2 #~ #: [: i. ^
> >>>
> ┌─────────────────────────────────────────────┬───────┬────────────────────┐
> >>>
> │┌─┬─┬───────────────────────────────────────┐│┌─┬─┬─┐│┌─────┬──┬─────────┐│
> >>>
> ││[│=│┌──┬─────┬────────────────────────────┐│││#│"│2│││┌─┬─┐│#:│┌──┬──┬─┐││
> >>> ││ │ ││[:│┌─┬─┐│┌──┬──┬────────────────────┐│││└─┴─┴─┘│││#│~││
> ││[:│i.│^│││
> >>> ││ │ ││  ││+│/│││[:│|:│┌─────┬──┬─────────┐││││       ││└─┴─┘│
> │└──┴──┴─┘││
> >>> ││ │ ││  │└─┴─┘││  │  ││┌─┬─┐│#:│┌──┬──┬─┐│││││
>  │└─────┴──┴─────────┘│
> >>> ││ │ ││  │     ││  │  │││#│~││  ││[:│i.│^││││││       │
>     │
> >>> ││ │ ││  │     ││  │  ││└─┴─┘│  │└──┴──┴─┘│││││       │
>     │
> >>> ││ │ ││  │     ││  │  │└─────┴──┴─────────┘││││       │
>     │
> >>> ││ │ ││  │     │└──┴──┴────────────────────┘│││       │
>     │
> >>> ││ │ │└──┴─────┴────────────────────────────┘││       │
>     │
> >>> │└─┴─┴───────────────────────────────────────┘│       │
>     │
> >>>
> └─────────────────────────────────────────────┴───────┴────────────────────┘
> >>>
> >>>    NB. Regardless of the nature of the arguments...
> >>>
> >>>    NB. Automatically,
> >>>
> >>>    cr f. decap ala  NB. Wicked Jx adverbs for decapitating and
> associating
> >>> @:s to the left
> >>> ([ = +/@:|:@:(#~ #: i.@:^)) #"2 #~ #: i.@:^
> >>>
> ┌─────────────────────────────────────────────┬───────┬────────────────────┐
> >>>
> │┌─┬─┬───────────────────────────────────────┐│┌─┬─┬─┐│┌─────┬──┬─────────┐│
> >>>
> ││[│=│┌─────────────┬──┬────────────────────┐│││#│"│2│││┌─┬─┐│#:│┌──┬──┬─┐││
> >>> ││ │ ││┌─────┬──┬──┐│@:│┌─────┬──┬─────────┐│││└─┴─┴─┘│││#│~││
> ││i.│@:│^│││
> >>> ││ │ │││┌─┬─┐│@:│|:││  ││┌─┬─┐│#:│┌──┬──┬─┐││││       ││└─┴─┘│
> │└──┴──┴─┘││
> >>> ││ │ ││││+│/││  │  ││  │││#│~││  ││i.│@:│^│││││
>  │└─────┴──┴─────────┘│
> >>> ││ │ │││└─┴─┘│  │  ││  ││└─┴─┘│  │└──┴──┴─┘││││       │
>     │
> >>> ││ │ ││└─────┴──┴──┘│  │└─────┴──┴─────────┘│││       │
>     │
> >>> ││ │ │└─────────────┴──┴────────────────────┘││       │
>     │
> >>> │└─┴─┴───────────────────────────────────────┘│       │
>     │
> >>>
> └─────────────────────────────────────────────┴───────┴────────────────────┘
> >>>
> >>>    NB. Manually,
> >>>
> >>>    [ (([ = +/@:|:@:]) #"2 ]) #~ #: i.@:^  NB. Distributing (#~ #: i.@
> :^)
> >>> [ (([ = +/@:|:@:]) #"2 ]) #~ #: i.@:^
> >>> ┌─┬──────────────────────────────────────┬────────────────────┐
> >>> │[│┌──────────────────────────┬───────┬─┐│┌─────┬──┬─────────┐│
> >>> │ ││┌─┬─┬────────────────────┐│┌─┬─┬─┐│]│││┌─┬─┐│#:│┌──┬──┬─┐││
> >>> │ │││[│=│┌─────────────┬──┬─┐│││#│"│2││ ││││#│~││  ││i.│@:│^│││
> >>> │ │││ │ ││┌─────┬──┬──┐│@:│]│││└─┴─┴─┘│ │││└─┴─┘│  │└──┴──┴─┘││
> >>> │ │││ │ │││┌─┬─┐│@:│|:││  │ │││       │ ││└─────┴──┴─────────┘│
> >>> │ │││ │ ││││+│/││  │  ││  │ │││       │ ││                    │
> >>> │ │││ │ │││└─┴─┘│  │  ││  │ │││       │ ││                    │
> >>> │ │││ │ ││└─────┴──┴──┘│  │ │││       │ ││                    │
> >>> │ │││ │ │└─────────────┴──┴─┘││       │ ││                    │
> >>> │ ││└─┴─┴────────────────────┘│       │ ││                    │
> >>> │ │└──────────────────────────┴───────┴─┘│                    │
> >>> └─┴──────────────────────────────────────┴────────────────────┘
> >>>
> >>>    [ ((  = +/@:|:   ) #"2 ]) #~ #: i.@:^  NB. Hook form
> >>> [ ((= +/@:|:) #"2 ]) #~ #: i.@:^
> >>> ┌─┬─────────────────────────────┬────────────────────┐
> >>> │[│┌─────────────────┬───────┬─┐│┌─────┬──┬─────────┐│
> >>> │ ││┌─┬─────────────┐│┌─┬─┬─┐│]│││┌─┬─┐│#:│┌──┬──┬─┐││
> >>> │ │││=│┌─────┬──┬──┐│││#│"│2││ ││││#│~││  ││i.│@:│^│││
> >>> │ │││ ││┌─┬─┐│@:│|:│││└─┴─┴─┘│ │││└─┴─┘│  │└──┴──┴─┘││
> >>> │ │││ │││+│/││  │  │││       │ ││└─────┴──┴─────────┘│
> >>> │ │││ ││└─┴─┘│  │  │││       │ ││                    │
> >>> │ │││ │└─────┴──┴──┘││       │ ││                    │
> >>> │ ││└─┴─────────────┘│       │ ││                    │
> >>> │ │└─────────────────┴───────┴─┘│                    │
> >>> └─┴─────────────────────────────┴────────────────────┘
> >>>
> >>>    NB. Given the nature of the arguments...
> >>>
> >>>    [ ((  = +/@:|:   ) #   ]) #~ #: i.@:^  NB. Redundant "2
> >>> [ ((= +/@:|:) # ]) #~ #: i.@:^
> >>> ┌─┬───────────────────────┬────────────────────┐
> >>> │[│┌─────────────────┬─┬─┐│┌─────┬──┬─────────┐│
> >>> │ ││┌─┬─────────────┐│#│]│││┌─┬─┐│#:│┌──┬──┬─┐││
> >>> │ │││=│┌─────┬──┬──┐││ │ ││││#│~││  ││i.│@:│^│││
> >>> │ │││ ││┌─┬─┐│@:│|:│││ │ │││└─┴─┘│  │└──┴──┴─┘││
> >>> │ │││ │││+│/││  │  │││ │ ││└─────┴──┴─────────┘│
> >>> │ │││ ││└─┴─┘│  │  │││ │ ││                    │
> >>> │ │││ │└─────┴──┴──┘││ │ ││                    │
> >>> │ ││└─┴─────────────┘│ │ ││                    │
> >>> │ │└─────────────────┴─┴─┘│                    │
> >>> └─┴───────────────────────┴────────────────────┘
> >>>
> >>>    [ ((  = +/"1     ) #   ]) #~ #: i.@:^  NB. Summing the rows of a
> matrix
> >>> [ ((= +/"1) # ]) #~ #: i.@:^
> >>> ┌─┬─────────────────────┬────────────────────┐
> >>> │[│┌───────────────┬─┬─┐│┌─────┬──┬─────────┐│
> >>> │ ││┌─┬───────────┐│#│]│││┌─┬─┐│#:│┌──┬──┬─┐││
> >>> │ │││=│┌─────┬─┬─┐││ │ ││││#│~││  ││i.│@:│^│││
> >>> │ │││ ││┌─┬─┐│"│1│││ │ │││└─┴─┘│  │└──┴──┴─┘││
> >>> │ │││ │││+│/││ │ │││ │ ││└─────┴──┴─────────┘│
> >>> │ │││ ││└─┴─┘│ │ │││ │ ││                    │
> >>> │ │││ │└─────┴─┴─┘││ │ ││                    │
> >>> │ ││└─┴───────────┘│ │ ││                    │
> >>> │ │└───────────────┴─┴─┘│                    │
> >>> └─┴─────────────────────┴────────────────────┘
> >>>
> >>> This latter form is the capless counterpart of the version provided by
> >>> Lippu Esa.
> >>>
> >>>
> >>>
> >>>
> >>> On Sat, Nov 28, 2015 at 2:27 AM, Linda A Alvord <
> lindaalv...@verizon.net>
> >>> wrote:
> >>>
> >>>> Pascal and others. I am curious to know if you find tacit code easy to
> >>>> read.
> >>>>
> >>>> cr=:([ = [: +/ [: |: #~ #: [: i. ^) #"2 #~ #: [: i. ^
> >>>> divy=:([: ,. [: <"1 '*' $~ ] ,~ [: <. %) , [: < '*' $~ [ - ] * [: <. %
> >>>>
> >>>> Those two tacit lines seem hard to translate for me. Instead I find
> the
> >>>> expressions below are quite easy to follow.
> >>>>
> >>>>    cr=: 13 :'(x= +/ |:(y#x)#:i.x^y) #"2 (y#x)#:i.x^y'
> >>>>    divy=: 13 :'(,.<"1((<.x%y),y)$''*''),<(x-y*<.x%y)$''*'''
> >>>>
> >>>> In most cases, with examples there is little documentation that is
> >>>> necessary.
> >>>>
> >>>> 2 cr 5
> >>>> 0 0 0 1 1
> >>>> 0 0 1 0 1
> >>>> 0 0 1 1 0
> >>>> 0 1 0 0 1
> >>>> 0 1 0 1 0
> >>>> 0 1 1 0 0
> >>>> 1 0 0 0 1
> >>>> 1 0 0 1 0
> >>>> 1 0 1 0 0
> >>>> 1 1 0 0 0
> >>>> 18 divy 5
> >>>> ------┐
> >>>> │*****│
> >>>> +-----+
> >>>> │*****│
> >>>> +-----+
> >>>> │*****│
> >>>> +-----+
> >>>> │***  │
> >>>> L------
> >>>> Maybe it is just that the explicit code looks like mathematics. It
> might be
> >>>> interesting and useful to hear how programmers and J users read code
> most
> >>>> easily.
> >>>>
> >>>> Linda
> >>>> -----Original Message-----
> >>>> From: programming-boun...@forums.jsoftware.com
> >>>> [mailto:programming-boun...@forums.jsoftware.com] On Behalf Of Don
> Kelly
> >>>> Sent: Friday, November 27, 2015 10:37 PM
> >>>> To: programm...@jsoftware.com
> >>>> Subject: Re: [Jprogramming] dyadic J
> >>>>
> >>>> there is nothing wrong with saying something like plus =: + conjugate
> =:+
> >>>> and knowing that  plus is intended to be monadic (although  +(real
> >>>> number) is the real number in either case.  If you want one to work as
> >>>> monadic onlyand the other as dyadic only-then you have to dress them
> up a
> >>>> bit with some test and error message.
> >>>> you can do  mean=:  sum divideby count  in any language.
> >>>> J has 2 meanings for +  -which are dependent on the context. English
> also
> >>>> is
> >>>> like that in that some words have two unrelated meanings (e.g bow ,
> can,
> >>>> twig, butt ) as well as having some with related meanings (e.g rise,
> level)
> >>>> and a lot of other things that depend on context It would be possible
> to
> >>>> build up a long list of names so that all uses of the primitives have
> >>>> different names and do just what the names indicate but is that of
> any more
> >>>> than limited  use?
> >>>>
> >>>>
> >>>>
> >>>> On 11/27/2015 1:08 PM, 'Pascal Jasmin' via Programming wrote:
> >>>> > Are you saying that if I define
> >>>> >
> >>>> > floor =: (<. : (<.@]))"0 _ 0
> >>>> >
> >>>> > that it does not have integrated rank support?
> >>>> >
> >>>> > The criticism about english and documentation seems hollow to me.  I
> >>>> don't
> >>>> say that Nuvoc is useless because it hasn't been implemented in 150
> >>>> languages.  An ability to read the dictionary in English is essential
> to
> >>>> learn J, and code typically uses english shaddows from profile.ijs.
> Making
> >>>> foreign language cover verbs including autotranslating the english
> ones is
> >>>> straightforward, and answers that part of the criticism.  Using the
> exact
> >>>> names from the dictionary (what I'm refering to as autodocumentation
> >>>> because
> >>>> the exact same place you would look up i. is where iota will be
> explained.)
> >>>> seems like an elegant way to ease a shallow learning curve on the
> process.
> >>>> >
> >>>> > The entire criticism could be applied to "you should never assign a
> verb
> >>>> to any name"
> >>>> >
> >>>> >
> >>>> >
> >>>> >
> >>>> > ----- Original Message -----
> >>>> > From: Raul Miller <rauldmil...@gmail.com>
> >>>> > To: Programming forum <programm...@jsoftware.com>
> >>>> > Sent: Friday, November 27, 2015 3:27 PM
> >>>> > Subject: Re: [Jprogramming] dyadic J
> >>>> >
> >>>> > On Thu, Nov 26, 2015 at 4:12 PM, 'Pascal Jasmin' via Programming
> >>>> > <programm...@jsoftware.com> wrote:
> >>>> >> The only disadvantage I recognize is the point about special code.
> >>>> > It would be interesting to go over the reasons you do not recognize
> >>>> > the other disadvantages.
> >>>> >
> >>>> >> As to your other points, because the primitives are tacit, I
> believe
> >>>> there is integrated rank support.
> >>>> >>
> >>>> >>    floor b. 0
> >>>> >> 0 _ _
> >>>> > You might want to read
> >>>> > http://www.jsoftware.com/pipermail/general/1998-October/000041.html
> >>>> >
> >>>> > All verbs have rank support, even verbs which contain explicit
> >>>> > definitions. However, for some combinations of primitives, the
> >>>> > interpreter takes special steps - bypassing the default
> implementation
> >>>> > of rank support with something more efficient.
> >>>> >
> >>>> >> English is needed to read dictionary, and all of the primitives
> are the
> >>>> monad dictionary entries, so everything is autodocumented.
> >>>> > In my experience, documentation is difficult and autodocumentation
> >>>> > quickly falls victim to entropy. It sounds great, but most examples
> I
> >>>> > have seen become incredibly useless in practice. It's possible to
> work
> >>>> > around this with manual effort, but the effort involved often seems
> to
> >>>> > be greater than the effort of simply doing it manually in the first
> >>>> > place. Where automation shines is replicating the useful manual
> >>>> > efforts.
> >>>> >
> >>>> >> The advantage bigger than the one you mentioned is better seeing
> the
> >>>> intent of code.
> >>>> > Agreed.
> >>>> >
> >>>> > Thanks,
> >>>> >
> >>>>
> >>>> ----------------------------------------------------------------------
> >>>> 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