This seems to crash J 9.02 under Windows 10: test2 =. (1&+)`(2&*)`(3&%~) @. (3&|) test2 i.7 In J 9.01, I get rank errors for arguments of "i.6" and "i.7" with this definition.
This test3 =. (1+])`(2*])`(3%~]) @. (3&|) gives the expected result in 9.02 but a rank error in 9.01. However if I define this test4 =. (1+])`(2*])`(3%~]) @. (3&|)"0 it gives the same answer in 9.01 as "test3" gives in 9.02. On Mon, Jun 8, 2020 at 10:10 AM Henry Rich <[email protected]> wrote: > 0: ` 1: ` 2: @. (3&|)"0 > > is the same as > > (0: ` 1: ` 2: @. (3&|))"0 > > you are running the whole agenda at rank 0, processing each > argument-atom separately and assembling the results. > > > If instead you use > > 0: ` 1: ` 2: @. ((3&|)"0) > > you haven't achieved anything: (3&|) and (3&|)"0 produce the same > result, and (3&|)"0 is slower because of the rank looping. > > > Part of your problem here is that you are using toy gerunds. 0: has > infinite rank and produces an atom no matter what the argument. (2&+) > on the other hand has infinite rank, but it produces a result with the > shape of its argument. You want to use gerunds like (2&+), whose > result-shape depends on the argument-shape. > > > I can't produce a rank error for (test1 i. 6). There are two paths in > the gerund code: the old-fashioned way, executing one gerund on each > cell, for use when there are few cells; and the new way, which collects > the cells that have the same selector and executes each gerund once on > an array of those cells. The new way is much faster when there are many > cells, but it fails if the verb is ill-behaved when given a list of > cells. The old way works even if the verb is ill-behaved. If I am > going to use the old way, I have no way of divining that the new way > would have failed, which is what it would take to raise a rank error. > > Henry Rich > > On 6/8/2020 8:45 AM, çağlar girit wrote: > > Hello Henry, > > > > Yes I'm using J9.02. I saw your explanation in the NuVoc writeup about > the > > implied rank and had solved the problem as you show in the examples, > > > > test2 =. 0: ` 1: ` 2: @. (3&|)"0 > > by specifying the rank of the test-verb instead of each gerund-verb. From > > the discussion at the bottom of the page, using atomic rank for the > > test-verb is more efficient than specifying for the gerund-verbs, right? > > > > Since test1 didn't throw a rank error for i.6, and from reading the > writeup > > it seemed like it should, I thought I must be missing something deeper. > As > > a J beginner I blame my understanding of the language rather than the > beta. > > Perhaps it would be good if J9.02 also threw a rank error. > > > > Thanks, > > Çağlar > > > > > -- > This email has been checked for viruses by AVG. > https://www.avg.com > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > -- Devon McCormick, CFA Quantitative Consultant ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
