J 中的每个前置副词

Each prior adverb in J

在Q/kdb中你可以很容易地用':修饰一个动词,它代表每个先验。它会将动词应用于一个元素及其之前的邻居。例如

=': 检查值对是否相等。在 J 中,您可以轻松折叠 /\ 但它是累积的,有没有成对的版本?

\ 具有特定长度的 dyadic valence 到 select 列表,根据正负长度具有不同的行为:

   2]\i.4
0 1
1 2
2 3
   3]\i.4
0 1 2
1 2 3
   _2]\i.4
0 1
2 3
   _3]\i.4
0 1 2
3 0 0

所以比较对:

   n=:1 2 2 2 3 3 1
   2]\n
1 2
2 2
2 2
2 3
3 3
3 1
   =/"(1) 2]\n
0 1 1 0 1 0
   _2]\n
1 2
2 2
3 3
1 0
   =/"(1) _2]\n
0 1 1 0

注意最后一对,您还可以旋转列表:

   n ,: n
1 2 2 2 3 3 1
1 2 2 2 3 3 1
   (] ,: 1&|.) n
1 2 2 2 3 3 1
2 2 2 3 3 1 1
   =/(] ,: 1&|.) n
0 1 1 0 1 0 1

如果您对每件物品的 上一个 邻居很挑剔:

   2|. 2 3 4
2 1
3 2
4 3

还有 'subarrays' 剪切的用法:

   2 <;.3 n
┌───┬───┬───┬───┬───┬───┬─┐
│1 2│2 2│2 2│2 3│3 3│3 1│1│
└───┴───┴───┴───┴───┴───┴─┘
   2 <;._3 n
┌───┬───┬───┬───┬───┬───┐
│1 2│2 2│2 2│2 3│3 3│3 1│
└───┴───┴───┴───┴───┴───┘
   2 =/;._3 n
0 1 1 0 1 0

后来,在学习了一点Q之后,each-prior的这种用法:

q)deltas 10 15 20
10 5 5
q)\
  -':10 15 20
10 5 5

在 J 中重复使用 \:

   < 15 20
┌──┬─────┬────────┐
│10│10 15│10 15 20│
└──┴─────┴────────┘
   2 < 15 20
┌─────┬─────┐
│10 15│15 20│
└─────┴─────┘
   2 <[=16=] , 10 15 20
┌────┬─────┬─────┐
│0 10│10 15│15 20│
└────┴─────┴─────┘
   2 -~/[=16=] , 10 15 20
10 5 5
   deltas =: 2 -~/\ 0&,
   deltas 10 15 20
10 5 5