De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

En ciencias de la computación , la programación puramente funcional generalmente designa un paradigma de programación, un estilo de construcción de la estructura y los elementos de los programas de computadora, que trata toda la computación como la evaluación de funciones matemáticas . La programación puramente funcional también se puede definir prohibiendo los cambios de estado y los datos mutables .

La programación puramente funcional consiste en asegurar que las funciones, dentro del paradigma funcional , solo dependan de sus argumentos, independientemente de cualquier estado global o local.

Diferencia entre programación funcional pura y no pura [ editar ]

La diferencia exacta entre programación funcional pura e impura es motivo de controversia. [1]

Se suele decir que un programa es funcional cuando utiliza algunos conceptos de programación funcional , como funciones de primera clase y funciones de orden superior . [2] Sin embargo, una función de primera clase no necesita ser puramente funcional, ya que puede utilizar técnicas del paradigma imperativo , como matrices o métodos de entrada / salida que no son programas puramente funcionales. De hecho, los primeros lenguajes de programación citados como funcionales, IPL y Lisp , [3] [4] eran ambos lenguajes funcionales "impuros" según la definición actual.

Las estructuras de datos puramente funcionales son persistentes . Se requiere persistencia para la programación funcional; sin él, el mismo cálculo podría arrojar resultados diferentes. La programación funcional puede usar estructuras de datos persistentes no puramente funcionales , mientras que esas estructuras de datos pueden no usarse en programas puramente funcionales.

Propiedades de la programación puramente funcional [ editar ]

Evaluación estricta versus no estricta [ editar ]

Cada estrategia de evaluación que termina en un programa puramente funcional devuelve el mismo resultado. En particular, asegura que el programador no tenga que considerar en qué orden se evalúan los programas, ya que la evaluación ansiosa devolverá el mismo resultado que la evaluación perezosa . Sin embargo, todavía es posible que una evaluación ansiosa no termine mientras se detiene la evaluación perezosa del mismo programa. Una ventaja de esto es que la evaluación diferida se puede implementar mucho más fácilmente; como todas las expresiones devolverán el mismo resultado en cualquier momento (independientemente del estado del programa), su evaluación puede retrasarse tanto como sea necesario.

Computación paralela [ editar ]

La programación puramente funcional simplifica la computación paralela [5] ya que dos partes puramente funcionales de la evaluación nunca interactúan.

Estructuras de datos [ editar ]

Las estructuras de datos puramente funcionales a menudo se representan de una manera diferente a sus contrapartes imperativas . [6] Por ejemplo, la matriz con acceso y actualización en tiempo constante es un componente básico de la mayoría de los lenguajes imperativos y muchas estructuras de datos imperativas, como la tabla hash y el montón binario , se basan en matrices. Las matrices se pueden reemplazar por mapa o lista de acceso aleatorio , que admite una implementación puramente funcional, pero el tiempo de acceso y actualización es logarítmico. Por lo tanto, las estructuras de datos puramente funcionales se pueden usar en lenguajes que no son funcionales, pero pueden no ser la herramienta más eficiente disponible, especialmente si no se requiere persistencia.

En general, la conversión de un programa imperativo a uno puramente funcional también requiere asegurarse de que las estructuras anteriormente mutables ahora sean devueltas explícitamente de las funciones que las actualizan, una estructura de programa llamada estilo de paso de almacenamiento .

Lenguaje puramente funcional [ editar ]

Un lenguaje puramente funcional es un lenguaje que solo admite programación puramente funcional. Sin embargo, los programas puramente funcionales pueden escribirse en lenguajes que no son puramente funcionales.

Referencias [ editar ]

  1. ^ Sabry, Amr (enero de 1993). "¿Qué es el lenguaje puramente funcional?". Revista de programación funcional . 8 (1): 1–22. CiteSeerX  10.1.1.27.7800 . doi : 10.1017 / S0956796897002943 .
  2. ^ Atencio, Luis (18 de junio de 2016). Programación funcional en Javascript . Publicaciones Manning. ISBN 978-1617292828.
  3. Las memorias de Herbert A. Simon (1991), Models of My Life pp.189-190 ISBN 0-465-04640-1 afirma que él, Al Newell y Cliff Shaw son "comúnmente considerados los padres de [la ] inteligencia artificial [campo] ", por escribir Logic Theorist , un programa que probóautomáticamente losteoremas de Principia Mathematica . Para lograr esto, tuvieron que inventar un lenguaje y un paradigma que, visto retrospectivamente, incorpora la programación funcional. 
  4. ^ McCarthy, John (junio de 1978). "Historia de Lisp" . En ACM SIGPLAN Historia de la conferencia de lenguajes de programación : 217–223. doi : 10.1145 / 800025.808387 . CS1 maint: parámetro desalentado ( enlace )
  5. ^ Marlow, Simon (18 de junio de 2013). Programación paralela y concurrente en Haskell: técnicas de programación multinúcleo y multiproceso . O'Reilly Media. ISBN 978-1449335946.
  6. ^ Estructuras de datos puramente funcionales por Chris Okasaki , Cambridge University Press , 1998, ISBN 0-521-66350-4