在APL中创建dfn函数以检查字词时出现长度错误

时间:2018-08-07 15:19:33

标签: string computer-science string-length anagram apl

我是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]

是因为第二次重排似乎有前导空间吗?为什么会这样呢?谁能建议我可以使该程序正常工作的方法?

1 个答案:

答案 0 :(得分:3)

在您的特定情况下,您需要从要比较的向量中过滤出空格。这是因为您的向量在分级后将具有不同的长度,因为其中一个具有额外的空间。

一种解决方案可能是:

'albert einstein'{(a b)←(⍺~' ')(⍵~' ')⋄a[⍋a]≡b[⍋b]}'ten elite brains'

代码的第一部分(a b)←(⍺~' ')(⍵~' ')分配给(~' ')a,而没有空格b 。然后,您可以像现在一样比较向量。

您可以在Try it online!

上检查以上代码的输出