문제

At the very end of A Personal View of APL (right before the references), Ken Iverson gave the following series of J code snippets:

[a=. b=. i. 5
0 1 2 3 4

   a +/ b 
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8

   over=.({.,.@;}.)&":@,
   by=. (,~"_1 ' '&;&,.)~
   a by b over a !/ b
+-+---------+
| |0 1 2 3 4|
+-+---------+
|1|1 1 1 1 1|
|2|0 1 2 3 4|
|3|0 0 1 3 6|
|4|0 0 0 1 4|
|5|0 0 0 0 1|
+-+---------+

   table=. /([`by`]`over`)\
   2 3 5 *table 1 2 3 4 5
+-+-------------+
| |1  2  3  4  5|
+-+-------------+
|2|2  4  6  8 10|
|3|3  6  9 12 15|
|4|5 10 15 20 25|
+-+-------------+

All of these work for me in J701, except the last, which gives me:

   table=. /([`by`]`over`)\
   2 3 5 *table 1 2 3 4 5
|rank error
|   2 3 5    *table 1 2 3 4 5

I notice in the original PDF from IBM that the quotes look more like:

table=. /([`by']`over')\

But this is a syntax error.

Was there a transcription error converting the PDF to HTML on the J site, or has the syntax of J changed?

도움이 되었습니까?

해결책

I don't think that this is valid J syntax (I mean, for what it is supposed to do); maybe it was then, but not any more. The adverb table can be simply defined as:

 table =: 1 :'[ by ] over u/'

The closest I can get to Iverson's version is:

 table =: /([`by`]`over`)

but then you have to evoke (`:) the result of the adverb:

 2 3 5 (*table`:6) 1 2 3 4 5
┌─┬─────────────┐
│ │1  2  3  4  5│
├─┼─────────────┤
│2│2  4  6  8 10│
│3│3  6  9 12 15│
│5│5 10 15 20 25│
└─┴─────────────┘

다른 팁

J has changed. Earlier versions allowed adverbs and conjunctions to be defined in ways that are no longer possible.

A version of table that is compatible with recent versions appears in the J Dictionary under "Bordering a Table"

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top