Según tengo entendido, las funciones parciales son funciones que obtenemos al pasar menos parámetros a una función de lo esperado. Por ejemplo, si esto fuera directamente válido en Python:
>>> def add(x,y):
... return x+y
...
>>> new_function = add(1)
>>> new_function(2)
3
En el fragmento anterior, new_function
es una función parcial. Sin embargo, de acuerdo con Haskell Wiki , la definición de función parcial es
Una función parcial es una función que no está definida para todos los argumentos posibles del tipo especificado.
Entonces, mi pregunta es: ¿qué se entiende exactamente por "función parcial"?
python
haskell
functional-programming
partial-application
partial-functions
Saurabh kukade
fuente
fuente
partial
realiza una aplicación parcial , mientras que Haskell lo hace automáticamente. La entrada wiki se refiere a funciones parciales , que es un término de las matemáticas.add 3 5
no es una aplicación de función única. Esto se aplica primeroadd
a 3 para obtener una nueva función, que luego se aplica a 5.partial
método es una declaración directa de un método privado opcionalmente implementado en otra parte de la base de código del proyecto.new_function = functools.partial(add, 1)
Respuestas:
Estás aquí confundiendo dos conceptos. Una función parcialmente aplicada [haskell-wiki] con una función parcial [haskell-wiki] .
Una función parcialmente aplicada es:
mientras que una función parcial es una función no total:
fuente
Una función parcial (tanto en el contexto de la programación funcional como de las matemáticas) es exactamente lo que dice el wiki: una función no definida para todos sus posibles argumentos. En el contexto de la programación, generalmente interpretamos "no definido" como una de varias cosas, incluido el comportamiento indefinido, las excepciones o la no terminación.
Un ejemplo de una función parcial sería la división de enteros, que no se define si el divisor es 0 (en Haskell arrojará un error).
Ese código simplemente causaría un error en Python, pero si funcionara como lo esperaba, sería una función total (es decir, no parcial).
Como los comentadores ya señalaron, lo más probable es que pienses en el hecho de que sería una función parcialmente aplicada .
fuente
Las respuestas explican todo, solo agregaré un ejemplo en cada idioma:
Esta no es una función parcial ni una función currificada , es solo una función que no dio todos sus argumentos .
Una función curry en python debería ser así:
y en haskell:
Una función parcial en python:
Y en Haskell, como apareció su enlace :
Bueno, básicamente lo contrario: esta es una función que funcionará para cualquier entrada de ese tipo. Aquí hay un ejemplo en python:
y esto funciona incluso para listas infinitas, si usas un pequeño truco:
Y el equivalente en Haskell:
Aquí las funciones no se cuelgan para siempre. El concepto es el mismo: para cada lista la función funcionará.
fuente