这个 APL 代码有什么作用?
What does this APL code do?
我正在努力学习 APL。以下代码片段来自 http://archive.vector.org.uk/art10011550,其中声明此代码就像用英语阅读 'MUMMY' 一样简单!
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。但是,我无法弄清楚这段代码的确切含义或作用是什么?有人可以在这里解释一下吗?谢谢
该代码等效于 R←∪V
- 获取唯一元素,仅保留向量中每个项目的第一个。
V⍳V
为向量 V 中的每个元素获取该项目在同一向量中的第一个索引。因此,对于第一次出现的元素,它将等于它在向量中的索引。对于 V←1 2 2 4 2 5
,结果是 1 2 2 4 2 6
⍳⍴V
returns 数字范围 1..length(V)。对于与上面相同的 V,结果是 1 2 3 4 5 6
.
并且 =
检查两者之间的逐元素相等性 - 它会为每个元素查找它之前是否出现在向量中。对于我的示例,此 returns 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
。
在 miserver.dyalog.com/Examples/Applications/Idiom_Search 上搜索 ((V⍳V)=⍳⍴V)/V
将为您提供:独一无二。从向量中删除重复项。 尽管您可能并不总是 幸运,因为变量名称可能不同。您也可以尝试在那里搜索没有名称的重要部分,例如)=⍳⍴
在这种情况下。
该文章的作者写了很多扩展版本,即优秀的书Mastering Dyalog APL。我强烈推荐它。
我正在努力学习 APL。以下代码片段来自 http://archive.vector.org.uk/art10011550,其中声明此代码就像用英语阅读 'MUMMY' 一样简单!
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。但是,我无法弄清楚这段代码的确切含义或作用是什么?有人可以在这里解释一下吗?谢谢
该代码等效于 R←∪V
- 获取唯一元素,仅保留向量中每个项目的第一个。
V⍳V
为向量 V 中的每个元素获取该项目在同一向量中的第一个索引。因此,对于第一次出现的元素,它将等于它在向量中的索引。对于 V←1 2 2 4 2 5
,结果是 1 2 2 4 2 6
⍳⍴V
returns 数字范围 1..length(V)。对于与上面相同的 V,结果是 1 2 3 4 5 6
.
并且 =
检查两者之间的逐元素相等性 - 它会为每个元素查找它之前是否出现在向量中。对于我的示例,此 returns 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
。
在 miserver.dyalog.com/Examples/Applications/Idiom_Search 上搜索 ((V⍳V)=⍳⍴V)/V
将为您提供:独一无二。从向量中删除重复项。 尽管您可能并不总是 幸运,因为变量名称可能不同。您也可以尝试在那里搜索没有名称的重要部分,例如)=⍳⍴
在这种情况下。
该文章的作者写了很多扩展版本,即优秀的书Mastering Dyalog APL。我强烈推荐它。