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

Reply via email to