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
