怎么回事
⌽(⍒'Hello')
是
1 2 4 3 5
当
⍋'Hello'
是
1 2 3 4 5
我是APL的新手并偶然发现了它。我只是想知道为什么第二个l出现在第一个之前。
答案 0 :(得分:2)
您使用等级⍋
和降级⍒
作为monadic基元。
根据定义,升级返回一个整数索引数组,以升序顺序指定其后面的表达式的排序顺序。如果任何元素相等(在你的例子中是两个字母l'),它们将以与它们在输入表达式中出现的顺序相同的顺序出现在结果中。
因此,⍋'Hello'
会返回1 2 3 4 5
。两个l的顺序相同,即第3个字符(第1个字母l)在第4个字符(第2个字母l)之前。
根据定义,降级还会返回一个整数索引数组,以降序顺序指定其后面的表达式的排序顺序。如果任何元素相等(在你的例子中是两个字母l'),它们也会以与它们出现在表达式中相同的顺序出现在结果中。
因此,⍒'Hello'
会返回5 3 4 2 1
。两个人保持相同的顺序,因为他们是平等的。
当您应用轮播⌽
时,整数数组会在您目击时反转为1 2 4 3 5
。
鉴于函数的定义方式以及它们如何处理相等的值,您所看到的结果正是预期的结果。
如果您想查看更极端的示例,请比较以下两个数组的输出。创建一个包含10个元素的数组,每个元素具有相同的值10⍴1
,然后尝试升级功能,然后尝试降级功能:
⍋10⍴1
和
⍒10⍴1
他们都会产生相同的结果:
1 2 3 4 5 6 7 8 9 10
答案 1 :(得分:0)
等级上升⍋和等级下降⍒基元保持相等元素的顺序。正如其他人所说,必须有一个相同论点的规则。但是这条规则具有允许多键排序的优点。 也就是说,如果你有一个包含多个相关键的数组,通过从最不重要到最重要的每个键排序,你得到一个按最重要的键排序的结果,其中equals按第二个mot重要排序,第1个项目等于1两个按第3个排序,依此类推。为此,必须捕获索引向量并用于更新所有密钥和数据以使它们保持同步。或者它们可以存储在嵌套结构中,在这种情况下,它们将自动保持在适当的相对顺序中。