Sie sind auf Seite 1von 7

Paradigmas y lenguajes de programacin representativa.

La programacin funcional
La programacin funcional, o mejor dicho, los lenguajes de programacin funcionales, son
aquellos lenguajes donde las variables no tienen estado no hay cambios en stas a lo largo del
tiempo y son inmutables no pueden cambiarse los valores a lo largo de la ejecucin. Adems
los programas se estructuran componiendo expresiones que se evalan como funciones. Dentro
de los lenguajes funcionales tenemos Lisp, Scheme, Clojure, Haskell, OCaml y Standard ML, entre
otros. Estos lenguajes estn diversidad de tipificacin, donde se encuentran lenguajes dinmicos,
estticos y estticos fuertes.

En los lenguajes funcionales las instrucciones cclicas como for, while y do-while no existen. Todo
se procesa usando recursividad y funciones de alto orden. Esto se debe a los fundamentos
matemticos de la mayora de los lenguajes funcionales, principalmente con bases en el sistema
formal diseado por Alonzo Church para definir cmputos y estudiar las aplicaciones de las
funciones llamado Clculo Lambda. En este sistema formal se puede expresar recursividad en las
funciones, y entre otras cosas interesantes, se pueden expresar combinadores funciones sin
variables libres como el Combinador de Punto Fijo o Y-Combinator, que expresa recursividad sin
hacer llamadas recursivas. En el Clculo Lambda existen tres transformaciones esenciales, la
conversin , la reduccin y la conversin . En la conversin se sustituyen los nombres de las
variables para dar ms claridad a la aplicacin de las funciones, por ejemplo evitando duplicados
en sus nombres. En la reduccin se traza el llamado de las funciones sustituyendo las funciones
por sus expresiones resultantes. Finalmente en las conversiones se busca las equivalencias de
trazado de funciones sustituyndolas por sus equivalentes. Estas transformaciones tambin
pueden ser aplicadas en los lenguajes funcionales o en su mayora dando lugar lenguajes que
cuentan con una gran expresividad y consistencia.

Los lenguajes funcionales proporcionan:

Facilidades de abstraccin sofisticadas.


Sistemas de mdulos.
Soluciones puras para la integracin de facilidades de I/O en la programacin
declarativa.
Adems de tcnicas y estrategias eficientes para la ejecucin de los programas.

Caractersticas:

Transparencia referencial. Al no haber variable, no hay efectos laterales, es decir,


al ejecutar la funcin (aunque ya hemos visto que el concepto de ejecutar no existe
como tal) no cambiar nada fuera del entorno de sta. Tampoco depender para
nada de lo que haya en ese entorno. Se dice que una funcin tiene transparencia
referencial si, para un valor de entrada, produce siempre la misma salida. En
programacin funcional esto es siempre as por definicin. Esto permite la

Evaluacin perezosa (Lazy evaluation). Para una mente acostumbrada a lo


imperativo esto cuesta de entender, as que atencin. Al no tener que seguir una
serie de rdenes, una tras otra, algunos los lenguajes funcionales slo evalan lo
que les es requerido en cada momento. Esto permite cosas como el cdigo
Haskell take 5 [1..], que significa coger los cinco primeros nmeros de una
lista infinita de nmeros empezando por el 1. En un lenguaje imperativo, esto
llevara a un bucle infinito mientras se genera la lista. En Haskell, slo se genera lo
que se necesita; en este caso, los cinco primeros nmeros. Esto puede redundar en
una ejecucin ms eficiente y un cdigo ms claro y cercano al matemtico.

Altsima abstraccin. Los lenguajes funcionales


implementan muchsimos mecanismos de abstraccin que te hacen la vida muy, muy
feliz. Un brutal sistema de tipos de datos, polimorfismo en muchos niveles, y un
montn de nuevos conceptos como funciones de orden superior, functores,
mnadas Las inevitables operaciones que no son puramente funcionales, como la
entrada/salida o los nmeros aleatorios, quedan envueltos en abstracciones que
resuelven la papeleta con elegancia.

Elegancia, legibilidad, flexibilidad. Por lo general, cuanto ms abstracto es un


lenguaje, ms se potencian estas caractersticas, por lo que los programas
funcionales suelen ser ms claros, ms concisos y ms bellos que sus contrapartidas
en lenguajes imperativos (incluso en preciosidades como Python o Ruby). El cdigo
ms artstico que he visto nunca, con diferencia, est en Haskell. Adems, la
ausencia de entorno y de estado permite que, si ests leyendo una funcin, slo
tengas que retener en tu cabeza esa funcin, sin preocuparte de ms. Esto facilita
adems

Facilidad para las pruebas y la depuracin. Gracias a la transparencia referencial,


hacer unit testing en lenguajes imperativos es trivial. Adems, el alto nivel hace que
los errores lo tengan difcil para esconderse por el cdigo, por lo que suelen
salir programas muy fiables.
Lisp
Lisp es un lenguaje tipo funcional, es el segundo lenguaje de alto nivel ms viejo, los dialectos de
Lisp ms ampliamente conocidos son el Scheme y Common Lisp.

El nombre Lisp viene de "LISt Processing" (Proceso de LIStas). Una de las estructuras de datos
importante de Lisp son las listas encadenadas, el cdigo fuente de lisp est compuesto de listas.

Es un lenguaje til para desarrollar la inteligencia artificial.

Uso de lenguaje Lisp:

Potencia:

(Defun potencia (base exponente)


(if (= exponente 0)
1
(* base (potencia base (- exponente 1)))))

POTENCIA
Break 101 [103]> (POTENCIA 1 2)
1
Break 101 [103]> (POTENCIA 2 2)
4
Break 101 [103]> (POTENCIA 2 5)
32
Break 101 [103]> (POTENCIA 3 3)
27
Break 101 [103]> (POTENCIA 3 3)

Factorial:

Break 114 [117]> (defun factorial (n)


(if (= n 0)
1
(* n (factorial (- n 1)))))
FACTORIAL
Break 114 [117]> (FACTORIAL 5)
120
La programacin lgica
La programacin lgica es aquel tipo de programacin que permite al software razonar, esto es,
hacer razonamientos, por ejemplo, de tipo deductivo o inductivo. Dada una base de datos
consistente en un conjunto de entidades, propiedades de esas entidades y relaciones de unas
entidades con otras, el sistema es capaz de hacer razonamientos. Bsicamente, este proceso se
expresa de la siguiente forma:

Resultados = reglas + hechos


Donde entendemos que hechos es el conjunto de datos que conoce el sistema a priori(o que va
adquiriendo a lo largo de su ejecucin) y reglas son un conjunto de operaciones que se pueden
aplicar a dichos datos para sacar un resultado lgico.

Algunos campos donde este tipo de lenguajes es aplicado son en la implementacin de Sistemas
Expertos (programas que generan una respuesta o una recomendacin sobre el tema para el que
estn implementados) o para la Generacin de nuevos Teoremas (dadas una serie de reglas,
generan teoremas).

Los lenguajes lgicos permiten:

- La computacin con informacin parcial.

- Estn provistos de facilidades de bsqueda de soluciones.

Sin embargo, se ha demostrado que las ventajas de estos estilos pueden combinarse de
manera efectiva y til sobre un lenguaje nico. Los lenguajes lgico funcionales modernos ofrecen
caractersticas de ambos estilos. La semntica operacional de los lenguajes integrados esta
usualmente basada en narrowing, una combinacin de la unificacin y reduccin como mecanismo
de evaluacin que subsume a la reescritura y a SLD-resolucin.

ALF (Another logical framework)


Este lenguaje combina la programacin lgica con la programacin funcional (funcional basado
en la evaluacin de expresiones y funciones matemticas ms que en la utilizacin de comandos
como,). Al igual que Prolog, ALF est basado en clusulas de Horn (por eso es programacin
lgica) pero tambin en funciones y ecuaciones (y por esto es tambin programacin funcional).
En ALF, se puede mezclar expresiones y ecuaciones; puedes poner una expresin funcional como
si fuese un predicado y cualquier predicado puede ser introducido como condicin en cualquier
ecuacin.

La base del procesamiento de ALF es resolution-narrowing-rewritingrejection. ALF usa reglas de


resolucin para evaluar los literales y reglas de estrechamiento (narrowing) para evaluar las
expresiones funcionales. Esto lo hace buscando en un rbol, que es una representacin del
lenguaje. Como el proceso de narrowing puede ser largo, se usan tcnicas de leftmost-
innermost basic narrowing, que son ms eficientes (el final de la expresin que se evala
primero siempre es un cierre de parntesis, el primer cierre y despus de evaluar esta expresin,
se sustituye todo l por el resultado al que se ha llegado, y se sigue procesando el siguiente
parntesis). Adems, las expresiones sufren un proceso de reescritura (rewriting) antes de ser
procesadas por las reglas de narrowing y las ecuaciones cuyos dos lados de la igualdad no
tengan el mismo nodo como origen son rechazadas (rejected). Estos dos pasos previos, hacen
que la bsqueda sea mucho ms eficiente. Adems ALF usa backtracking con bsqueda en
profundidad en el rbol de derivaciones.

Los programas escritos en ALF, se compilan y dan lugar a una serie de instrucciones de una
mquina virtual basada en Warren Abstract Machine (WAM) con mltiples extensiones para
soportar narrowing and rewriting. Actualmente, esta mquina virtual es un emulador y su
implementacin est basada en C.

Este lenguaje es open Source, por lo que cualquier usuario puedo introducir sus funciones y
modificarlo a su gusto. Aqu tenemos un ejemplo de este lenguaje. En este caso, es un archivo de
la librera predefinida, en el que se define lo que es un vector y sus propiedades.
Gdel programming language
Gdel es un lenguaje en el que las sentencias lgicas llevan un orden y en el que existe el
polimorfismo.

Est basado en mdulos (que aceptan polimorfismo) y en tipos de datos (soporta enteros y
racionales con una precisin infinita, y nmero en coma flotante) y tiene una amplia librera de
mdulos predefinidos.

Es un buen lenguaje para tareas de meta-programacin, tales como compilacin, depuracin,


anlisis, verificacin o transformacin de programas, ya que es mucho ms declarativo que Prolog,
por ejemplo.

Como curiosidad, se puede destacar que este lenguaje no funciona en un entorno Windows.

Ejemplo: Mximo Comn Divisor


Bibliografa

http://www.it.uc3m.es/jvillena/irc/practicas/estudios/Lenguajes_Logicos.pdf

http://computacion.cs.cinvestav.mx/~acaceres/courses/itesm/lp/clases/lp14.pdf

http://www.genbetadev.com/paradigmas-de-programacion/programacion-funcional-un-enfoque-
diferente-a-los-problemas-de-siempre

Das könnte Ihnen auch gefallen