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要求基数向量和输入向量具有相同的长度)是否有一些用于我不知道的解码函数?
答案 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扩展到高阶数组的参数,并且在内积中,左参数的最后一个维度必须与右边的第一个维度相匹配。