The concept of "code smells" stinks, in my opinion. That said, yes, you do not need amend here. You can use key (/. dyad) or expand (#inv) to build the indicated result.
But I should probably let you work through the details - you'll better understand the concepts that way. (But feel free to ask for help if you get stuck.) Thanks, -- Raul On 7/10/14, Ben Gorte - CITG <[email protected]> wrote: > > >> Better how? Time? Space? Compactness? > > Better than the "code smell" of using amend, according to the previous > discussion > > > > On 7/10/14, Ben Gorte - CITG <[email protected]> wrote: >> I am often in situations where I want to put a lot of (image) >> measurements >> in a grid. I know what values I have to put at which positions, but I do >> not >> have the entire set (sensor malfunctioning). >> >> This simulates it. From >> M =: ?1000 1000$5 >> my sensor takes: >> i=.4$.$.M >> v=.5$.$.M >> $i >> 800076 2 >> >> So I have 800076 values v and indexes i, which I want to put in a 1000 by >> 1000 grid, filling up de holes with 0-s: >> >> N =: v (;/i) } 1000 1000$0 >> >> And of course: >> N -: M >> 1 >> >> Is there a better way to do this? >> >> Ben >> ___________________________ >> From: [email protected] >> [[email protected]] on behalf of Dan Bron >> [[email protected]] >> Sent: Tuesday, July 08, 2014 02:23 >> To: [email protected] >> Subject: Re: [Jprogramming] Tacit J and indexed replacement >> >> Do you have examples, in practice, where you've wanted to modify one item >> (or a sublist) from a data structure? >> >> Would you say those circumstances are the exception or the rule? (I'm >> asking >> because it's definitely the exception in my own experience, and more >> often >> than not a "code smell"). >> >> -Dan >> >> Please excuse typos; sent from a phone. >> >>> On Jul 7, 2014, at 8:14 PM, "'Pascal Jasmin' via Programming" >>> <[email protected]> wrote: >>> >>> I think } (dyadic amend) is pretty essential. The obvious use is >>> amending >>> one (or sublist) item from a data structure. >>> >>> Item amend maybe a little more esoteric, but I find it easy to >>> conceptualize, and use the "verbified" form 4 : 'x}y' as a "natural" way >>> of implementing the example in this thread. >>> >>> >>> ----- Original Message ----- >>> From: Dan Bron <[email protected]> >>> To: [email protected] >>> Cc: >>> Sent: Monday, July 7, 2014 7:42:35 PM >>> Subject: Re: [Jprogramming] Tacit J and indexed replacement >>> >>> Pepe, I'm with Ian and Henry on this one: questions of efficiency aside, >>> I >>> rarely find a call for } . The only place I really use it is in the >>> expression ('A'&=)`(,:&'B') } to make scalar substitutions. So I'm >>> interested in where you find uses for it. >>> >>> Do you have specific examples? Would you say you reach for } when >>> efficiency is a concern, even if the thought could be expressed more >>> conveniently using some other tool, or that you've found places where } >>> is the best way to say what you want to say? If the latter (} is the >>> word >>> you want), are there any particular characteristics that tie those use >>> cases together? >>> >>> I personally find (bearing in mind that I'm a J hobbyist, and [no >>> longer] >>> a >>> professional) that I mostly think in terms of items, and modifying >>> anything below the level of an item would be quite unusual in my code, >>> and >>> make me suspicious. Similarly, I almost always treat all items >>> identically, and a consistent need to treat just some items specially >>> would make me suspicious, and I'd wonder whether I should be structuring >>> my data differently. >>> >>> With that said, I certainly (especially in my "professional J-ing" days) >>> see the benefit of } for performance. But I'm wondering if you've >>> invented or discovered generally beneficial uses of } unrelated to >>> performance. I'd be very interested in that, if so ('cause the only one >>> I >>> ever invented or discovered was, as I said, scalar substitution). >>> >>> -Dan >>> >>> ----- Original Message --------------- >>> >>> Subject: Re: [Jprogramming] Tacit J and indexed replacement >>> From: Jose Mario Quintana <[email protected]> >>> Date: Mon, 7 Jul 2014 19:12:55 -0400 >>> To: Programming forum <[email protected]> >>> >>> 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 >>> ---------------------------------------------------------------------- >>> 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
