Una pregunta rápida que me ha estado molestando últimamente. ¿Realiza Haskell toda la prueba de equivalencia en una función que devuelve un valor booleano, incluso si uno devuelve un valor falso?Cortocircuito (&&) en Haskell
Por ejemplo
f a b = ((a+b) == 2) && ((a*b) == 2)
Si la primera prueba devuelve falso, va a realizar la segunda prueba después de la &&
? ¿O es Haskell lo suficientemente flojo como para no hacerlo y seguir adelante?
¿Es esto también lo mismo en el caso de la lista de comprensiones? –
'Cortocircuito' no se habla correctamente. Simplemente no se sabe si se evalúan los valores, ya que no hay manera de probarlo sin efectos secundarios, pero es poco probable que lo hagan a menos que sea necesario. – Dario
Creo que es lo mismo que C++: el lenguaje dice que el lado derecho no se evalúa. Pero, por supuesto, si el compilador puede decir que no hay efectos secundarios, puede evaluarlo de todos modos, y algunos compiladores de C++ lo hacen, ya que las ramas condicionales son costosas. –