为什么APL的decode-decode需要基数向量中的额外数字?

时间:2016-12-13 04:42:32

标签: decode apl

APL有一个原始函数,用于“解码”其他数字基数。在函数的左侧,将每个数字关联的位置值放在另一个数字基数中。在右侧,您可以放置​​您感兴趣的数字向量。

例如:

    2 2 2 2 ⊥ 0 1 0 1   ⍝ (What you type in) Convert 0101 form base 2 into base 10
5                       ⍝ (What the interpreter computes)

然而,基数向量中最左边的2从未在任何解码计算中使用。例如,

      ¯48 2 2 2 ⊥ 0 1 0 1 ⍝ We can replace the leftmost radix digit with a random number
5                         ⍝ Same answer as before

      ¯48 2 2 2 ⊥ 1 1 1 1 ⍝ Just to prove that the leftmost decode digit is unused
15                        ⍝ Correct decode of 1111

      65 2 2 2 ⊥ 1 1 1 1  ⍝ Try another random number for testing
15                        ⍝ Again, the correct answer is output

因此,如果从未使用过最左边的数字,为什么APL需要它呢? (具体来说,APL要求基数向量和输入向量具有相同的长度)是否有一些用于我不知道的解码函数?

3 个答案:

答案 0 :(得分:2)

您的陈述

  

具体而言,APL要求......具有相同的长度

只是部分正确。引用Dyalog APL Manual

  如果X的最后一个轴的长度与Y的第一个轴的长度相同,则X和Y是一致的。标量或1个元素的矢量被扩展到所需长度的矢量。如果X的最后一个轴或Y的第一个轴的长度为1,则该数组沿该轴延伸以符合另一个参数。

因此,这意味着2 ⊥ 1 1 1 1足以计算15

我找到了很好的解释here,但由于该页面存在字体问题,我会用正确的字体重现它:

从B,语句Q←B⊥R中的基数向量,我们计算加权向量W,作为评估的第一步。使用特定示例:0 3 12 ⊥ 4 2 7(将码数,英尺和英寸转换为英寸),从B计算加权向量,如下所示:

inches per yard: 3⊥12 or 36 
inches per foot: 12
inches per inch: 1

加权向量为36 12 1。在APL中,可以写出加权向量的评估过程:

      N←⍴B               ⍝ Length of B
      W←N⍴0              ⍝ Give W the proper shape
      W[1]←×/1↓B         ⍝ Product of all but the first element  of B
      W[2]←×/2↓B         ⍝ Product of all but the first 2 elements  of B  etc.
         .               ⍝ etc.
         .
         .
      W[N-1]←×/(N-1)↓B   ⍝ Next to last element of W is last  element of B
      W[N]←1             ⍝ Last element of W is always I

请注意,未使用B的第一个元素。要完成编码的评估,请取W倍R的总和:

      Q←+/W×R

此结果为B⊥R。对于我们的具体例子:

      36 12 1 ⊥ 4 2 7
144 24 7

      144 + 24 + 7
175
      0 3 12 ⊥ 4 2 7
175

答案 1 :(得分:0)

我没有任何东西要添加到MBaas&#39;非常好的答案,但我会在IBM大型机的APL2中分享有关CREATE VIEW Novinky AS SELECT games.GameID FROM games WHERE games.GameDate <= NOW() AND games.GameSlide = 0 GROUP BY games.GameName HAVING 1 ORDER BY `games`.`GameDate` DESC LIMIT 8 的错误。

由于其他人可能感兴趣,我将其放在一个单独的问题中:LINK

答案 2 :(得分:0)

简短的回答是,arguments的论据必须符合要求。

2 2 2 2 ⊥ 1 1 1 1       ⍝ ok
2 2 2 2 ⊥ 1 1 1 1 1     ⍝ length error
      2 ⊥ 1 1 1 1       ⍝ scalar extension of the left argument
2 2 2 2 ⊥ 1             ⍝ scalar extension of the right argument

Ar扩展到高阶数组的参数,并且在内积中,左参数的最后一个维度必须与右边的第一个维度相匹配。