我是APL的初学者,正在编写dfm函数,以检查两个字符串是否彼此相同。我想到的方法是:
{⍵[⍋⍵] ≡ ⍺[⍋⍺]}
但是,它为0
和'ALBERT EINSTEIN'
的字谜返回'TEN ELITE BRAINS'
。我试图检查原因:
a ← 'ALBERT EINSTEIN'
b ← 'TEN ELITE BRAINS'
a[⍋a] ≡ b[⍋b]
0
a[⍋a]
ABEEEIILNNRSTT
b[⍋b]
ABEEEIILNNRSTT
a[⍋a] = b[⍋b]
LENGTH ERROR
a[⍋a]=b[⍋b]
是因为第二次重排似乎有前导空间吗?为什么会这样呢?谁能建议我可以使该程序正常工作的方法?
答案 0 :(得分:3)
在您的特定情况下,您需要从要比较的向量中过滤出空格。这是因为您的向量在分级后将具有不同的长度,因为其中一个具有额外的空间。
一种解决方案可能是:
'albert einstein'{(a b)←(⍺~' ')(⍵~' ')⋄a[⍋a]≡b[⍋b]}'ten elite brains'
代码的第一部分(a b)←(⍺~' ')(⍵~' ')
将⍺
和⍵
分配给(~' ')
和a
,而没有空格b
。然后,您可以像现在一样比较向量。
您可以在Try it online!
上检查以上代码的输出