Dan wrote:

> note that the reason ~ is provided in addition to "., and the reason
> anon_evoke was developed, is because both are adverbs, and so can produce
> _any part of speech_.  This is not true of the verbs  128!:2  or  ".  ,
> which by definition must produce nouns.


Oh yes, this is true for 128!:8!      :D

   '(]^:(1:`(<''@.'')))&0' 128!:2 <'*'
*

   2 '(]^:(1:`(<''@.'')))&0' 128!:2 <'*' 0 1 2
0 2 4


On Fri, Jan 25, 2013 at 1:52 PM, Dan Bron <[email protected]> wrote:

> David Ward Lambert asked:
> >  I have not yet successfully traced the substitutions of the
> >  power operator, but why do you need it?
>
> Because ]^:(1:`(<'@.')) is a verb and  @. is a conjunction.
>
> Conjunctions are limited because their arguments are forever fixed.  They
> can't be changed at runtime.  We can a limited form of reusability from @.
> by using by using verbal right arguments, but due to limitations in the
> implementation of  @. , even that limited dynamism is hamstrung (and of
> course there's no way to change the left argument at all).
>
> In contrast, the verb ]^:(1:`(<'@.')) can be re-used with multiple distinct
> left arguments, and furthermore allows the right argument to be integer
> vectors, which permit multi-application (along the lines of `:0), and, even
> more impressive, boxed vectors, which allow arbitrary composition of the
> elements of the gerund (with full nesting!).
>
> In other words, in addition to the standard advantages of a verb over a
> conjunction (dynamic arguments, flexibility derived from rank and other
> modifiers, etc), ]^:(1:`(<'@.')) has the overwhelming advantage of being
> able to execute _arbitrary noun phrases_.  As a simple example of that, I
> used it to reimplement  ".  (aka the J language).  But, with a little
> creativity, you could use it to interpret any number of little languages.
> The utility of embedded "domain specific languages", or DSLs, is well-known
> in industry.
>
> If the difference still isn't clear, check out the verb "dont", and try to
> reimplement it without the using  ]^:(1:`(<'@.'))  or something equally
> sneaky.
>
> With all that said ... I was mostly being cute :) Showing off stupid J
> tricks.
>
> -Dan
>
> PS:  The need for these kinds of sneaky tricks would be significantly
> reduced if the limitations on  @.  were lifted.  In particular, if in [email protected]
> g were permitted to return vector arguments (integer and boxed). The
> conjunction still wouldn't be as reusable as  ]^:(1:`(<'@.'))  , because
> its
> right argument can't change, but it would be a big step forward.
>
> Similar sentiments apply to the limitations on  noun~  .  Currently, using
> ~  to evoke a string requires that string to represent a simple name,
> instead of an arbitrary J sentence.  For example:
>
>         avg =: +/ % #
>         'avg'~ 1 2 3
>
> works, cutting out the (unnecessary) middle man:
>
>             '+/ % #'~ 1 2 3
>         |ill-formed name
>         |       '+/ % #'~1 2 3
>
> fails.  There's no good rationale for this, and implementing a ~ workalike
> which respects anonymous sentences requires some serious contortions.  For
> example, here's a quote from the script I referenced yesterday, "anonymous
> evoke" [1]:
>
>             anon_evoke     =.  (("_) (`'') (<@gn`)) (`(<gn 0)) (`:6) ('@.'
> ;
> (,&<&gn nest2Box)@:gTxt`) (`:6) (@.1 0 2)
>
> Which, ironically, is even more convoluted because of the earlier-mentioned
> limitations of  @.  !
>
> [Before anyone suggests '+/ % #' 128!:2 ] 1 2 3  or  ".'(+/ % #)', ": 1 2 3
> note that the reason ~ is provided in addition to "., and the reason
> anon_evoke was developed, is because both are adverbs, and so can produce
> _any part of speech_.  This is not true of the verbs  128!:2  or  ".  ,
> which by definition must produce nouns.
>
> For example:
>
>         un  =. '&.:'
>         cd  =. +/ 'un'~ *:    NB. Cartesian distance
>
> can't be emulated with 128!:2 etc.]
>
>
> [1]  Anonymous evoke
>
> http://www.jsoftware.com/svn/DanBron/trunk/environment/anonymous_evoke2.ijs
>
>
> ----------------------------------------------------------------------
> 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