2014-06-08 39 views
2

我想检查2个载体在APL中是否相同。现在我使用下述溶液(由元素比较元素,总结的元素,并与载体a的大小比较):比较APL中的载体

a←1 2 3 
b←1 2 3 
(+/a=b)=⍴a ⍝ it needs to return 0 or 1 

是否有更快或更地道的解决方案?

回答

6

可以使用匹配函数,其比较其整个参数而不是等号其是每个参数的元素进行比较标量函数:

 a←1 2 3 
     b←1 2 3 4 5 
     c←1 2 3 
     a≡b 
0 
     a≡c 
1 
+0

关于David Siegel写的内容,如果任何0元素与几乎为零的元素进行比较,匹配将失败,即使⎕CT(比较容差)超过差异。例如。 '3 2 1 0≡3 2 11E¯100'。 –

1

匹配原始的,如上面提到的,返回1,如果参数完全相同。这意味着它们具有完全相同的排名,形状,数据类型和内容。在少数情况下,由于数据类型问题(即使在整数的比较容差范围内导致浮点表示的分割),匹配将返回错误的否定结果,或者因为缩放器不匹配1个元素的向量。

^/A = B

将返回1,如果等于相应的B的元件的测试中的所有元素,但它会具有长度错误,如果a和b是不同长度的失败,它将使用定标器扩展,以便如果a是1 1 1,b是定标器1,结果将为1.

匹配通常对此更好,而且它在大型数组上也更高效。