Programación puramente funcional


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 cambios de estado y datos mutables .

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

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 usar 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.

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.

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