2

APL 个人观点的最后(就在参考文献之前),Ken Iverson 给出了以下一系列 J 代码片段:

[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|
+-+-------------+

所有这些都在 J701 中为我工作,除了最后一个,它给了我:

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

我在IBM 的原始 PDF 中注意到引号看起来更像:

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

但这是一个语法错误。

是否在 J 站点上将 PDF 转换为 HTML 时出现转录错误,或者 J 的语法是否发生了变化?

4

2 回答 2

2

我不认为这是有效的 J 语法(我的意思是,它应该做什么);也许是那时,但不再是了。副词table可以简单地定义为:

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

我能得到的最接近艾弗森的版本是:

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

但是你必须唤起 ( `:) 副词的结果:

 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│
└─┴─────────────┘
于 2012-07-06T10:43:04.407 回答
1

J变了。早期版本允许以不再可能的方式定义副词和连词。

与最近版本table兼容的版本出现在J 词典中的“Bordering a Table”下

于 2012-07-06T23:03:14.423 回答