3

我正在努力学习 APL。以下代码片段来自http://archive.vector.org.uk/art10011550,其中声明此代码就像用英语阅读“妈妈”一样简单!

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

我试图从https://en.wikipedia.org/wiki/APL_syntax_and_symbols检查,我发现

R is outcome variable
← means gets a value
⍴ means number of components in each dimension of V
⍳ means vector of initial elements

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

4

2 回答 2

4

((V⍳V)=⍳⍴V)/Vmiserver.dyalog.com/Examples/Applications/Idiom_Search上搜索将给您:唯一。从向量中删除重复项。尽管您可能并不总是那么幸运,因为变量名称可能会有所不同。您也可以尝试在那里搜索没有名称的重要部分,例如)=⍳⍴在这种情况下。

有问题的文章的作者写了很多扩展版本,即优秀的书Mastering Dyalog APL。我可以强烈推荐它。

于 2018-01-21T00:28:19.443 回答
3

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

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.

在线尝试!

于 2018-01-20T13:39:35.640 回答