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

Reply via email to