这个APL代码有什么作用?

时间:2018-01-20 12:59:06

标签: apl dyalog

我正在努力学习APL。以下代码段来自reserved as the start of a fragment identifier,其中声明此代码就像在英语中阅读“MUMMY”一样简单!

author = models.ForeignKey('auth.User',
        on_delete=models.DO_NOTHING,)

我试图从base64 encode the inner png image查看,我发现

R←((V⍳V)=⍳⍴V)/V

因此,此代码处理输入变量V并生成输出变量R.但是,我无法弄清楚此代码的确切含​​义或含义是什么?有人可以在这里解释一下。感谢。

2 个答案:

答案 0 :(得分:4)

miserver.dyalog.com/Examples/Applications/Idiom_Search上搜索((V⍳V)=⍳⍴V)/V会为您提供:唯一身份。从矢量中删除重复项。虽然你可能并不总是 幸运,因为变量名可能不同。您也可以尝试在那里搜索没有名称的重要部分,例如在这种情况下)=⍳⍴

该文章的作者撰写了大量扩展版本,即优秀的书Mastering Dyalog APL。我强烈推荐它。

答案 1 :(得分:3)

该代码相当于R←∪V - 获取唯一元素,只留下向量中每个项目的第1个。

V⍳V为向量V中的每个元素获取同一向量中该项的第一个索引。因此,对于第一次出现的元素,它将等于向量中的索引。对于V←1 2 2 4 2 5,结果为1 2 2 4 2 6

⍳⍴V返回一系列数字1..length(V)。对于与上述相同的V,结果为1 2 3 4 5 6

=检查两者之间的元素相等 - 它为每个元素找到它是否出现在向量之前。对于我的示例,这将返回1 1 0 1 0 1

然后/V过滤初始向量,只留下上面向量中与1对应的项目。结果为1 2 4 5

我将该表达式读作Items of the vector V where the first appearance of the item equals it's index

Try it online!