Vector APL中的向量比较

Vector APL中的向量比较,vector,apl,Vector,Apl,我想检查APL中的两个向量是否相同。现在我正在使用以下解决方案(逐元素比较,元素求和,并与向量a的大小进行比较): 有没有更快或更惯用的解决方案?您可以使用match函数来比较其整个参数,而不是equals函数,equals函数是一个标量函数,用于比较每个参数的元素: a←1 2 3 b←1 2 3 4 5 c←1 2 3 a≡b 0 a≡c 1 如上所述,如果参数完全相同,则match原语返回1。这意味着它们具有完全相同的等级

我想检查APL中的两个向量是否相同。现在我正在使用以下解决方案(逐元素比较,元素求和,并与向量
a
的大小进行比较):


有没有更快或更惯用的解决方案?

您可以使用match函数来比较其整个参数,而不是equals函数,equals函数是一个标量函数,用于比较每个参数的元素:

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

如上所述,如果参数完全相同,则match原语返回1。这意味着它们具有完全相同的等级、形状、数据类型和内容。在少数情况下,match将返回假阴性,因为数据类型问题(除法导致浮点表示,即使它在整数的比较容差内),或者因为定标器将不匹配1元素向量

^/a=b

如果测试的所有元素都等于b的对应元素,则返回1,但如果a和b的长度不同,则返回1会导致长度错误,并使用定标器扩展,因此如果a为1,b为定标器1,则结果将为1


匹配通常更好,在大型阵列上也更有效。

关于David Siegel所写的,如果将任何0元素与几乎为零的元素进行比较,匹配就会失败,即使⎕CT(比较公差)超过差异。例如
3 2 1 0≡ 3 2 1 1E'100
       a←1 2 3
       b←1 2 3 4 5
       c←1 2 3
      a≡b
0
      a≡c
1