Thanks, guys, keep the ideas coming. There's enough been said in this
thread to enable me to substantially improve the NuVoc presentation of
Amend in http://www.jsoftware.com/jwiki/Vocabulary/curlyrt#dyadic - which I
think most would agree doesn't present Amend in the most appealing light.
Perhaps unfairly so.

In particular, I like Aai's idea:

zero =: 0:`[`]}
   3 5 zero i.9
0 1 2 0 4 0 6 7 8

(BTW I realize this not the form he delivered it in)

which I think ought to replace the present cumbersome NuVoc example.

Raul asks, as usual, "what am I trying to do?" Adopting the role of a J
novice, I have to reply "learn J of course" - by the expedient of learning
the utility and usage of J's primitives, viewed as a toolkit. But if I come
clean about my own personal motives, it's to write a good NuVoc page which
helps a complete J novice understand Amend and what it's good for - if
anything.

I reject the insinuation that I use Amend less than I might because I'm not
smart enough. A J novice, experienced in another language, would feel
patronized by such a suggestion. Moreover she would find it hard to resist
the impression that J-jocks were covering up for a grave defect in the
language. And I was lying when I said I didn't have much use for Amend. But
I wanted to play devil's advocate in support of Erling's criticism, because
I believe he speaks for most newcomers trained on a "scalar" language like
C.

For all the splendid, creative ways of force-feeding Amend into submission
I've seen in this thread (e.g. by using a gerund for operand "m") I still
stand firmly by what Henry and I wrote in the NuVoc page on Amend:

x m} y is used in J much less than you would think, considering the
importance of in-place array modification in other languages.

And the reason for that has less to do with finding it "hard to get my head
round Amend" than the fact that "in-place array modification" is a
technique that goes hand-in-hand with a scalar approach to problem-solving,
which is not what J is designed to do well. So Raul's question "what am I
trying to do?" turns out to be appropriate after all, when it comes to
using Amend. Or using something else - like (*) or (#) with a Boolean list.


On Mon, Jul 7, 2014 at 4:58 AM, Raul Miller <[email protected]> wrote:

> Since it'w nagging at me (and this is still unteted code :/), here's
> what I currently think i should have said:
>    amend=: (0:{::])`(1:{::])`(2:{::])}~
>
> The trailing ~ because I need the dyad from the resulting verb, and
> the trailing ] on each because those verbs need to ignore one of the
> resulting arguments.
>
> Sadly, my fingers (and "quick memory") keep forgetting this.
>
> Thanks,
>
> --
> Raul
>
> On 7/6/14, Raul Miller <[email protected]> wrote:
> > Meh, no, that won't work.
> >
> > Stick with Jose's version.
> >
> > (I also don't have the feature enabled which lets me cancel sending an
> > email after "sending" it.)
> >
> > I'll just go do some "practical" work now...
> >
> > Sorry for the noise.
> >
> > --
> > Raul
> >
> > On 7/6/14, Raul Miller <[email protected]> wrote:
> >> Oops, yes. Sorry about that.
> >>
> >> I should have said:
> >>    amend=: (0:{::)`(1:{::)`(2:{::)}~
> >>
> >> (I'm working right now from a machine where J doesn't run, and I
> >> forget details when I don't test my code.)
> >>
> >> Thanks,
> >>
> >> --
> >> Raul
> >>
> >> On 7/6/14, Jose Mario Quintana <[email protected]> wrote:
> >>> Raul wrote:
> >>> "
> >>>  For example:
> >>>     amend=: 0&{::`(1&{::)`(2&{::)}
> >>>     amend 0;2 3 5;7#9
> >>>  9 9 0 0 9 0 9
> >>> "
> >>>
> >>> Actually,
> >>>
> >>>    JVERSION
> >>> Installer: j602a_win.exe
> >>> Engine: j701/2011-01-10/11:25
> >>> Library: 6.02.023
> >>>
> >>>    amend=: 0&{::`(1&{::)`(2&{::)}
> >>>    amend 0;2 3 5;7#9
> >>> |rank error: amend
> >>> |       amend 0;2 3 5;7#9
> >>> |[-3]
> >>>
> >>> However,
> >>>
> >>>    amend=. _: 0&{::@]`(1&{::@])`(2&{::@])} ]
> >>>    amend 0;2 3 5;7#9
> >>> 9 9 0 0 9 0 9
> >>>
> >>> I use a slight variation of this verb occasionally; yet, I find the
> >>> forms
> >>> <@:v N} ] and v N} ] extremelly useful for writing tacitly (and I write
> >>> tacitly all the time).
> >>>
> >>>
> >>>
> >>> On Sun, Jul 6, 2014 at 6:42 AM, Raul Miller <[email protected]>
> >>> wrote:
> >>>
> >>>> I would agree that amend is seldom useful in much the same way that
> >>>> computers are seldom useful. That is: it depends on what you mean by
> >>>> "seldom" (and, for that matter, "useful").
> >>>>
> >>>> Generally speaking, } is one of the less common characters that I use
> >>>> when I write in J, but I do use it.
> >>>>
> >>>> Also, in addition to the very fine 0:`[`]} which behaves something
> like
> >>>> this:
> >>>>
> >>>>    2 3 5 0:`[`]} 7#9
> >>>> 9 9 0 0 9 0 9
> >>>>
> >>>> (Aside: note that in the above expression 2 3 5 is a word, and 0: is a
> >>>> separate word. Try ;:'2 3 5 0:`[`]} 7#9' if you want proof.)
> >>>>
> >>>> ... in addition to that approach, you can also arrange so that all
> >>>> arguments are given in an argument list, if you use
> >>>> 0&{::`(1&{::)`(2&{::)}
> >>>>
> >>>> For example:
> >>>>    amend=: 0&{::`(1&{::)`(2&{::)}
> >>>>    amend 0;2 3 5;7#9
> >>>> 9 9 0 0 9 0 9
> >>>>
> >>>> But, as with everything, whether this is a good thing or not depends
> >>>> on what you are trying to do...
> >>>>
> >>>> Which leads back to the question: what are you trying to do?
> >>>>
> >>>> Thanks,
> >>>>
> >>>> --
> >>>> Raul
> >>>>
> >>>> On 7/6/14, Ric Sherlock <[email protected]> wrote:
> >>>> > I don't agree that Amend is seldom useful. I do agree that it isn't
> >>>> > the
> >>>> > easiest thing to get your head around (perhaps why you have found
> >>>> > other
> >>>> > ways to getting stuff done).
> >>>> >
> >>>> > Aai has shown how to tacitly use Amend so it seems that 13 : is not
> >>>> > smart
> >>>> > enough to give you a tacit equivalent. I suspect the reason Amend
> has
> >>>> been
> >>>> > defined as an adverb is that it requires 3 arguments: the array to
> >>>> > amend,
> >>>> > the indicies to amend, the replacement data. Compare that to From
> >>>> > which
> >>>> > only requires 2 bits of info (the array, the indicies).
> >>>> >
> >>>> >
> >>>> >
> >>>> > On Sun, Jul 6, 2014 at 7:53 PM, Ian Clark <[email protected]>
> >>>> > wrote:
> >>>> >
> >>>> >> I think Erling is quite right, if you take what he says literally:
> >>>> "Amend
> >>>> >> is seldom useful for indexed replacement when you write tacit J".
> >>>> >>
> >>>> >> I'd go further and say "Amend is seldom useful." Period. I write a
> >>>> >> lot
> >>>> of
> >>>> >> J
> >>>> >> code and I hardly ever use it.
> >>>> >>
> >>>> >> To someone coming from C (say), this cries out for explanation. In
> >>>> >> C,
> >>>> just
> >>>> >> about everything is done by keyhole surgery, i.e. by tinkering with
> >>>> >> whatever happens to be at the end of a pointer (read: index). In J,
> >>>> >> just
> >>>> >> about nothing is done that way.
> >>>> >>
> >>>> >> Let me give an example. Suppose I want to write a verb to zero the
> >>>> >> x'th
> >>>> >> element of a list y ...
> >>>> >> I can easily write it as an explicit verb:
> >>>> >>
> >>>> >>    zero=: 4 : '0 x} y'
> >>>> >>    3 zero i.6
> >>>> >> 0 1 2 0 4 5
> >>>> >>
> >>>> >> But "13 :" refuses to give me an equivalent tacit verb ...
> >>>> >>
> >>>> >>    13 : '0 x}y'
> >>>> >> 4 : '0 x}y'
> >>>> >>
> >>>> >> Is this just a shortcoming of "13 :" ? Does anyone know a "nice"
> >>>> >> tacit
> >>>> >> equivalent? I don't.
> >>>> >>
> >>>> >> Contrast this with what happens if I switch round 0 and x (...which
> >>>> gives
> >>>> >> me a verb to replace the first element of a list y with x). In this
> >>>> >> case
> >>>> >> "13 :" does deliver me a nice simple tacit equivalent ...
> >>>> >>
> >>>> >>    13 : 'x 0}y'
> >>>> >> 0}
> >>>> >>
> >>>> >> So why doesn't  13 : '0 x}y'  do something equally as nice? It's
> all
> >>>> >> explained in
> >>>> >> http://www.jsoftware.com/jwiki/Vocabulary/curlyrt#dyadic
> >>>> >> .
> >>>> >> But
> >>>> >> that doesn't really explain to a newcomer why Amend was designed as
> >>>> >> an
> >>>> >> adverb:
> >>>> >>     x m} y
> >>>> >> with (index) m as an *operand*, not an *argument*.
> >>>> >>
> >>>> >> Yes, I can write a tacit verb to zero the x'th element of list y
> ...
> >>>> >>
> >>>> >>    zero2=: 13 : 'y * y~:x'
> >>>> >>    3 zero2 i.6
> >>>> >> 0 1 2 0 4 5
> >>>> >>    zero2
> >>>> >> ] * ~:
> >>>> >>
> >>>> >> ... but not by using Amend, which is quite simply not useful in
> that
> >>>> role.
> >>>> >> Though I'm not claiming it can't be done - in fact there's a worked
> >>>> >> example
> >>>> >> in: http://www.jsoftware.com/jwiki/Vocabulary/curlyrt#dyadic under
> >>>> "More
> >>>> >> Information". But I wouldn't call it "nice".
> >>>> >>
> >>>> >> This illustrates the J approach to programming:
> >>>> >> http://www.jsoftware.com/jwiki/Vocabulary/Loopless -and how it
> >>>> contrasts
> >>>> >> with the C approach. Henry would explain it far better than I can,
> >>>> >> but
> >>>> >> he's
> >>>> >> busy.
> >>>> >>
> >>>> >> IanClark
> >>>> >>
> >>>> >>
> >>>> >> On Sat, Jul 5, 2014 at 8:59 PM, Erling Hellenäs <
> >>>> [email protected]>
> >>>> >> wrote:
> >>>> >>
> >>>> >> > Hi all !
> >>>> >> >
> >>>> >> > When you write tacit code, the index m used by Amend, syntax
> >>>> description
> >>>> >> >  x m} y, is a constant?
> >>>> >> > Normally you have a variable you want to use for indexing? This
> >>>> >> > means
> >>>> >> > Amend is seldom useful for indexed replacement when you write
> >>>> >> > tacit
> >>>> >> > J?
> >>>> >> > Are there any descriptions of nice ways to do indexed replacement
> >>>> >> > in
> >>>> >> tacit
> >>>> >> > J?
> >>>> >> > As with Amend, the result has to be a new variable, of course.
> >>>> >> >
> >>>> >> > Cheers,
> >>>> >> >
> >>>> >> > Erling Hellenäs
> >>>> >> >
> >>>> >> >
> ----------------------------------------------------------------------
> >>>> >> > 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