[Editar]¿Son dos funciones iguales?
La pregunta general parece increíblemente difícil de resolver. Aquí hay una restricción significativa de version de esta pregunta.
¿Cómo puedo determinar la igualdad de funciones?
digamos que tenemos
function f() {
// black box code.
}
function g() {
// black box code.
}
tomamos una definición matemática de una función. Así
if for all x in domain, f(x) === g(x) then f === g
- ¿Cómo manejamos dominios?
- ¿Cómo podemos determinar si de lo contrario
f === g
cheques de código fuente es tonta porque
function f(i) {
return i % 2;
}
function g(i) {
var returnVal = i % 2;
return returnVal;
}
son obvouisly iguales. Estos son ejemplos triviales, pero se puede imaginar que las funciones más complejas son iguales pero no idénticas.
Puede suponer que f
y g
no tienen efectos secundarios que nos importen.
[Editar]
Como se mencionó @Pointy es probablemente lo mejor para limitar el dominio. En lugar de tener la función de igualdad, intente adivinar el dominio, el usuario de la función de igualdad debería proporcionar un dominio.
No tiene sentido preguntar si dos funciones son iguales sin definir su dominio en alguna parte.
Para simplemente el problema podemos asumir al dominio es el conjunto de todos los enteros o un subconjunto de que lo que necesitamos una función:
function equal (f, g, domain) {
}
La estructura del dominio es irrelevante y puede ser hecho para hacer el problema es lo más fácil posible También puede suponer que f
y g
actúan muy bien en el dominio de los enteros y no bloquean & burn.
¡Usted puede suponer que f
y g
se detienen!
Una vez más @Pointy señala un buen ejemplo de funciones no deterministas
¿Y si nos limitamos f
& g
a ser determinista.
Bueno, como JavaScript permite efectos secundarios, es incluso más complicado que simplemente verificar el valor de retorno. Supongo que puedes restringir el problema de esa manera si quieres, pero no entiendo su valor práctico. – Pointy
@Pointy Esperaba modelar conjuntos infinitos como funciones. Luego manipule estos conjuntos y tenga algún tipo de control de igualdad. En este caso, puede suponer que no hay efectos secundarios. – Raynos
Oh OK entonces. Es un problema interesante; Una forma de abordar esto es ver si puede encontrar una prueba de que ** no ** es posible. – Pointy