Correspondência de função em Q

O operador de correspondência binária (~) pode ser aplicado a funções, mas o resultado da operação pode ser contra-intuitivo.

Duas funções correspondem apenas se e somente se suas definições forem idênticas .

Por exemplo:

f: {x * x}
f1
: {[x]; x * x}
f2
: {:x * x}
f3
: {[a]; a * a}
f4
: { x * x}

f
~ f1 / Result: 0b
f
~ f2 / Result: 0b
f
~ f3 / Result: 0b
f
~ f4 / Result: 0b

Em outras palavras, mesmo se os mapeamentos de E / S de duas funções forem iguais, a função de correspondência pode não retornar 1b.
Portanto, essencialmente, o resultado do operador de correspondência é o resultado da correspondência das strings subjacentes:

f ~ g

é equivalente a

(string f) ~ (string g)

Por outro lado, a operação de correspondência é uma boa maneira de verificar se duas expressões integradas são equivalentes:

(each[reverse]) ~ (reverse each)  /Result: 1b