Ian wrote: " 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. "
How come? In the form (x m} y), x, y and m are all allowed to be arrays, are they not? Ian wrote: " 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. " I also stand firm by what I wrote (no offense): "I find the forms <@:v N} ] and v N} ] extremelly useful for writing tacitly." That is, when the task at hand goes beyond to dealing with one or two (tacit) arguments and joggling intermediate results with forks or alike (and the tacit sentence (paragraph, chapter, section, book,...) is meant to be efficient). :) Actually, I think, both statements (yours and mine) can stand because few J users are willing to go that far tacitly. On Mon, Jul 7, 2014 at 3:22 AM, Ian Clark <[email protected]> wrote: > 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 > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
