Raul, Yes. I agree that there often just isn't any obvious word that can be used to describe many J primitive functions, not to mention simple J phrases. Thus J has to use words that have meanings somehow related to each function, or just make one up. In either case, it makes it nearly impossible to track down a required functionality by word searches. One has to essentially go through each primitive, looking for the required functionality.
I have found that the J Phrases pages <http://www.jsoftware.com/help/phrases/contents.htm> makes a reasonable first attempt at categorizing J primitives and simple phrases into broad categories, using words that are related to that category of functions in a way that is understandable to a more general audience. About half the time I can find something close to what I need by using Phrases. However the definitions of the individual phrases are often cryptically succinct, still making it hard to narrow down the analysis. More importantly, many useful functions (like a vector except) are just missing. I believe that a document which categorizes primitives and simple phrases into general categories, and then gives simple examples leading to more complex examples, would be a great help to newbies trying to learn J. It would also help experienced programmers who are looking for a better way to do something. The Phrases pages are a good start, but more categories and simpler examples are needed. Skip Skip Cave Cave Consulting LLC On Tue, Nov 8, 2016 at 10:34 AM, Raul Miller <[email protected]> wrote: > It's so much that J has been redefining programming terms, but that > those programming terms are usually taken to mean something different > from what J does. > > (Also, if you look closely, a lot of those terms are themselves > re-definitions of what used to mean something different.) > > I do not have an easy solution for this, but spending half an hour a > day on exercises (from j labs, tutorials, etc) can help a great deal. > > Asking help here, like you have been doing, is also a great approach. > > A related issue, though, is that you should often expect to find some > undiscovered "hidden thing" while exploring the language. Sometimes it > will be features of a primitive like this one, other times it will be > a new approach or way of combining things. > > On a related note, nothing worth doing is ever easy (otherwise, it > would be done already). > > -- > Raul > > > > > On Tue, Nov 8, 2016 at 11:22 AM, Skip Cave <[email protected]> > wrote: > > Henry, > > > > Yes, I did see that part of the curlylf page. However, I was looking for > a > > discussion of the pattern <<< and I didn't see it there. In fact, when I > > searched for the text "<<<" on the J Software site, I got zero hits. > Well, > > I did get hits, but when I went to the link, there was never the <<< > > pattern. > > > > I also searched for the word "except" which gave me 373 hits on the J > > Software site, more than I wanted to check. However, the top result did > > link to the curlylf page, but again with no <<<. > > > > Unfortunately, this experience is all too common for me as I try to learn > > J. J's re-defining of the semantics of programming terms makes it > difficult > > to use word searches on the J Software site to discover how to create a > > specific function that I want to implement. > > > > Skip > > > > Skip Cave > > Cave Consulting LLC > > > > On Tue, Nov 8, 2016 at 6:25 AM, Henry Rich <[email protected]> wrote: > > > >> Did you look at > >> > >> http://code.jsoftware.com/wiki/Vocabulary/curlylf#Complement > >> ary_Indexing_and_Omitted_Axes > >> > >> ? It describes this, including pictures of selectors that produce > various > >> results. > >> > >> Henry Rich > >> > >> On 11/8/2016 3:27 AM, Skip Cave wrote: > >> > >>> Rob, > >>> > >>> Thanks. 'Except' is a very useful tool to keep in my toolbox. > Frankly, I > >>> think there needs to be a wiki page on the J Software site dedicated to > >>> exploring this option in more depth. I would have never found out about > >>> this if Raul hadn't pointed it out > >>> > >>> The idea is touched on briefly in the page Raul pointed out > >>> <http://www.jsoftware.com/help/dictionary/d520.htm>, and also hinted > at > >>> briefly on the 'from' vocabulary page > >>> <http://code.jsoftware.com/wiki/Vocabulary/curlylf>, but I think the > >>> > >>> subject needs much more explanation. A search for 'except' on the J > >>> software site should lead one to a page full of examples as the top > search > >>> result. The examples should start very simply, and gradually show more > & > >>> more complex options. > >>> > >>> Skip > >>> > >>> Skip Cave > >>> Cave Consulting LLC > >>> > >>> On Tue, Nov 8, 2016 at 2:08 AM, Rob Hodgkinson <[email protected]> > wrote: > >>> > >>> Hi Skip, > >>>> > >>>> 2 3 ((<@<@<@[){]) 1 2 3 4 5 > >>>> 1 2 5 > >>>> > >>>> ex=:(<@<@<@[){] > >>>> 2 3 ex 1 2 3 4 5 > >>>> 1 2 5 > >>>> > >>>> Rob > >>>> > >>>> > >>>> On 8 Nov. 2016, at 5:44 pm, Skip Cave <[email protected]> > wrote: > >>>>> > >>>>> Aha! except! I had no idea that from '{' had such a useful option. > >>>>> > >>>>> (<<< 1 4 5 7) { 2 3 5 7 11 14 56 78 95 > >>>>> > >>>>> 2 5 7 56 95 NB. Cool! > >>>>> > >>>>> > >>>>> > >>>>> If i wanted to make a dyadic verb 'ex' that worked just like the > above, > >>>>> > >>>> how > >>>> > >>>>> could I do that? > >>>>> > >>>>> > >>>>> 1 4 5 7 ex 2 3 5 7 11 14 56 78 95 > >>>>> > >>>>> 2 5 7 56 95 > >>>>> > >>>>> > >>>>> > >>>>> ex =: [:@<@<@<[{] > >>>>> > >>>>> 2 3 ex 1 2 3 4 5 > >>>>> > >>>>> |index error: ex > >>>>> > >>>>> | 2 3 ex 1 2 3 4 5 > >>>>> > >>>>> > >>>>> Nope! that didn't work. > >>>>> > >>>>> > >>>>> Skip > >>>>> > >>>>> Skip Cave > >>>>> Cave Consulting LLC > >>>>> > >>>>> On Tue, Nov 8, 2016 at 12:32 AM, Raul Miller <[email protected]> > >>>>> > >>>> wrote: > >>>> > >>>>> 2 { 2 3 5 7 11 > >>>>>> 5 > >>>>>> (<<<2) { 2 3 5 7 11 > >>>>>> 2 3 7 11 > >>>>>> > >>>>>> Look for the word "except" at http://www.jsoftware.com/help/ > >>>>>> dictionary/d520.htm > >>>>>> > >>>>>> Thanks, > >>>>>> > >>>>>> -- > >>>>>> Raul > >>>>>> > >>>>>> > >>>>>> On Tue, Nov 8, 2016 at 12:17 AM, Skip Cave <[email protected] > > > >>>>>> wrote: > >>>>>> > >>>>>>> Nice! Xiao-Yong's verb does exactly what I need. > >>>>>>> > >>>>>>> f=:(] +:@{`[`]} <@<@<@]{[)"_ 0 [:I.2=/\] > >>>>>>> > >>>>>>> t =. 1 2 2 4 1 5 3 4 4 4 2 3 3 > >>>>>>> > >>>>>>> f t > >>>>>>> > >>>>>>> 1 4 4 1 5 3 4 4 4 2 3 3 > >>>>>>> > >>>>>>> 1 2 2 4 1 5 3 8 4 2 3 3 > >>>>>>> > >>>>>>> 1 2 2 4 1 5 3 4 8 2 3 3 > >>>>>>> > >>>>>>> 1 2 2 4 1 5 3 4 4 4 2 6 > >>>>>>> > >>>>>>> > >>>>>>> I can understand [:I.2=/\]. Using I. is the perfect way to find the > >>>>>>> indices of the dups. However, the rest of that big infinite-rank > tacit > >>>>>>> expression to the left must generate each of the reduced items. I'm > >>>>>>> > >>>>>> totally > >>>>>> > >>>>>>> lost trying to figure that out. Why the zero? Why three <@? I > thought > >>>>>>> [ > >>>>>>> represented a left argument, but there isn't a left argument. Any > help > >>>>>>> > >>>>>> is > >>>> > >>>>> appreciated. > >>>>>>> > >>>>>>> > >>>>>>> Skip > >>>>>>> > >>>>>>> Skip Cave > >>>>>>> Cave Consulting LLC > >>>>>>> > >>>>>>> On Mon, Nov 7, 2016 at 10:25 PM, Xiao-Yong Jin < > [email protected] > >>>>>>> > > >>>>>>> wrote: > >>>>>>> > >>>>>>> So you probably just need this: > >>>>>>>> f=:(] +:@{`[`]} <@<@<@]{[)"_ 0 [:I.2=/\] > >>>>>>>> or really the adverb > >>>>>>>> a=:1 :'u@(] +:@{`[`]} <@<@<@]{[)"_ 0 [:I.2=/\]' > >>>>>>>> > >>>>>>>> You may find different solutions if you abstract your problem > >>>>>>>> > >>>>>>> differently. > >>>>>> > >>>>>>> On Nov 7, 2016, at 9:30 PM, Skip Cave <[email protected]> > >>>>>>>>> > >>>>>>>> wrote: > >>>>>> > >>>>>>> Very interesting. Quite a difference in space and time usage, not > to > >>>>>>>>> mention length of the tacit code. > >>>>>>>>> > >>>>>>>>> For my application, a rank 0 or 1 in the summed result isn't all > >>>>>>>>> that > >>>>>>>>> critical. As long as the contents of each box can be used in > further > >>>>>>>>> arithmetic and Boolean operations (e.g. it's not text), then I'm > ok. > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> It looks like nouns with ranks 0 or 1 don't affect the outcome of > >>>>>>>>> > >>>>>>>> simple > >>>>>> > >>>>>>> arithmetic operations: > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> ($4);($,4);(4=,4);(1+4);(1+,4);((1+4)=1+,4);($1+4);($1+,4) > >>>>>>>>> > >>>>>>>>> ┌┬─┬─┬─┬─┬─┬┬─┐ > >>>>>>>>> > >>>>>>>>> ││1│1│5│5│1││1│ > >>>>>>>>> > >>>>>>>>> └┴─┴─┴─┴─┴─┴┴─┘ > >>>>>>>>> > >>>>>>>>> The only time the difference becomes an issue: > >>>>>>>>> > >>>>>>>>> ($4)=($,4) > >>>>>>>>> > >>>>>>>>> |length error > >>>>>>>>> > >>>>>>>>> | ($4) =($,4) > >>>>>>>>> But I don't care about this. > >>>>>>>>> > >>>>>>>>> Actually, Mike Day spotted what I was really trying to attempt. > >>>>>>>>> The original starting vector is: > >>>>>>>>> > >>>>>>>>> n =: 1 2 2 4 1 5 3 4 4 4 2 3 3 > >>>>>>>>> > >>>>>>>>> Then I box at each possible pair of integers using an infix > >>>>>>>>> > >>>>>>>> sliding-window > >>>>>>>> > >>>>>>>>> on each pair of integers. This sliding box scheme was just to > >>>>>>>>> > >>>>>>>> identify > >>>> > >>>>> all > >>>>>>>> > >>>>>>>>> the duped pairs in the original vector. > >>>>>>>>> > >>>>>>>>> ]N =: 2<\pp > >>>>>>>>> > >>>>>>>>> ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ > >>>>>>>>> > >>>>>>>>> │1 2│2 2│2 4│4 1│1 5│5 3│3 4│4 4│4 4│4 2│2 3│3 3│ > >>>>>>>>> > >>>>>>>>> └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘ > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> What I ultimately wanted is a verb that will replace the duped > pairs > >>>>>>>>> > >>>>>>>> in > >>>>>> > >>>>>>> the > >>>>>>>> > >>>>>>>>> *original* un-boxed vector, one at a time: > >>>>>>>>> > >>>>>>>>> n =: 1 2 2 4 1 5 3 4 4 4 2 3 3 > >>>>>>>>> > >>>>>>>>> f n > >>>>>>>>> > >>>>>>>>> 1 4 4 1 5 3 4 4 4 2 3 3 > >>>>>>>>> > >>>>>>>>> 1 2 2 4 1 5 3 8 4 2 3 3 > >>>>>>>>> > >>>>>>>>> 1 2 2 4 1 5 3 4 8 2 3 3 > >>>>>>>>> > >>>>>>>>> 1 2 2 4 1 5 3 4 4 4 2 6 > >>>>>>>>> > >>>>>>>>> Of course, the final row lengths will be one shorter that the > >>>>>>>>> > >>>>>>>> original > >>>> > >>>>> row > >>>>>>>> > >>>>>>>>> length. > >>>>>>>>> > >>>>>>>>> Skip > >>>>>>>>> ------------------------------------------------------------ > >>>>>>>>> > >>>>>>>> ---------- > >>>>>> > >>>>>>> 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/forum > >>>>>>> s.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
