残留和一致

时间:2015-12-31 09:16:48

标签: apl

从APL书中,我试图破译当'j'不为0时我如何在C中转换'r'的计算:

  

对于每组整数n,j和b,其中b> 0,存在   唯一的整数q和r这样的

  n = bq + r,   j ≤ r < j + b.
     

将数量r称为n模b的j残差,并表示为   b | j n。例如,3 | 0 9 = 0,3 | 1 9 = 3,并且3 | 0 10 = 1。   此外,如果n≥0,则b | 0 n是除以得到的余数   n由b和q组成商的组成部分。

什么代表'j',如何通过在区间内迭代来获得r而不进行解析?

然后,该段的其余部分说:

  

在经典治疗中,如Wright(1939),只有0残基   考虑。使用单原点索引(参见1.5节)说明了这一点   1残基的利益。

所以我猜C中的n mod b例如b | j n,其中j = 0,但我不明白为什么使用'j = 1'会有利于索引1-origin。这有什么用?

3 个答案:

答案 0 :(得分:2)

符号,符号,符号。

艾弗森的A编程语言中使用的符号早于后来作为现代APL实现。

kei apl

我是从http://www.jsoftware.com/papers/APL.htm

得到的

因此,将3 | 0 9作为下标写入0将在今天的几乎所有APL中起作为3 | 9。

3 | 1 9,其中1作为下标而未实现,但可以作为定义的运算符求解。 (我使用了Dyalog 13.1)

     ∇ r←x(i mod)y                        
[1]    r←i+x|y-i                          
     ∇                                    

      3 (0 mod) 9
0
      3 (1 mod) 9
3
      3 (0 mod) 10
1

      ⎕io←0
      3 (0 mod) ⍳9
0 1 2 0 1 2 0 1 2

      ⎕io←1
      3 (1 mod) ⍳9
1 2 3 1 2 3 1 2 3

答案 1 :(得分:1)

假设N很大(或为负)并且你有一个b

在C中,它是0原点,你希望索引在0 ... b-1(包括)中。

在APL中,默认情况下为1-origin,您希望索引在1 ... b中。

这可能是1指数的好处。您可以计算1原点 来自没有迭代的0-origin:

if(idx == 0)idx = b;

答案 2 :(得分:1)

Q1:是的。

b|j n中,b标量扩展为匹配j n。因此它与(b∣j),(b∣n).相同 j 不是 | 的修饰符。换句话说,b∣j n不是n的j残基,而是j的0残基,后跟n的0残基。

在GNU APL中(我也相信所有其他APL)你得到:

      3∣0 9
0 0
      3∣1 9
1 0

从0残基模b中,您可以通过 j∣b添加到0残基来获得j残基:

      +/ 3∣0 9
0
      +/ 3∣1 9
1