Sie sind auf Seite 1von 7

Instituto Tecnolgico de Quertaro

Unidad Pinal de Amoles

Divisin de Educacin Presencial a Distancia

Materia: Programacin Lgica y Funcional

Ingeniera en Sistemas Computacionales.

Actividad: Ensayo Temas Unidad 2

Alumno:
Jos Luis Prez Ortega

Asesor: Ing. Alfredo Andrs Nez Ugalde


augalde_depad_qro@hotmail.com

Tutor: I.S.C. Dany Josu Molina Aguilar


dmolina_depad_pin@hotmail.com

Martes 02-Febrero-2015

Programacion Lgica y Funcional


Unidad Pinal de Amoles

Unidad 2. Programacin Funcional


Definicin de 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.
Que quiere decir con esto de que no hay cambios a lo largo de la ejecucin, sucede que cuando
estas compilando un pequeo programa con valores ya definidos, al momento que quieres
cambiar alguna variable, evidentemente compilador no te dejara moverle piezas al cdigo a
menos que detengas la compilacin del programa y realices los cambios correspondientes al
cdigo, tal es el caso del lenguaje de programacin c# ya sea en consola o aplicacin de Windows
Form, que no te deja hacer modificaciones al cdigo mientras el programa se esta ejecutando.

Software que se utiliza para la Programacin Funcional


En este rubro de programacin existe una comunidad de lenguajes de programacin para todo
tipo de aplicaciones los cuales pueden ser imperativos y funcionales, los cuales explicaremos a
continuacin.
Lenguaje de programacin imperativo
Un lenguaje imperativo programa mediante una serie de comandos, agrupados en bloques y
compuestos de rdenes condicionales que permiten al programa retornar a un bloque de
comandos si se cumple la condicin. Estos fueron los primeros lenguajes de programacin en uso y
an hoy muchos lenguajes modernos usan este principio.
Lenguaje de programacin funcional
Un lenguaje de programacin funcional(a menudo llamado lenguaje procedimental) es un
lenguaje que crea programas mediante funciones, devuelve un nuevo estado de resultado y recibe
como entrada el resultado de otras funciones. Cuando una funcin se invoca a s misma, hablamos
de recursividad.
Interpretacin y compilacin
Los lenguajes de programacin pueden, en lneas generales, dividirse en dos categoras:

Jos Luis Prez Ortega

Pgina 2

Programacion Lgica y Funcional


Unidad Pinal de Amoles

lenguajes interpretados
lenguajes compilados

Lenguaje interpretado
Un lenguaje de programacin es, por definicin, diferente al lenguaje mquina. Por lo tanto, debe
traducirse para que el procesador pueda comprenderlo. Un programa escrito en un lenguaje
interpretado requiere de un programa auxiliar (el intrprete), que traduce los comandos de los
programas segn sea necesario.
Lenguaje compilado
Un programa escrito en un lenguaje "compilado" se traduce a travs de un programa anexo
llamado compilador que, a su vez, crea un nuevo archivo independiente que no necesita ningn
otro programa para ejecutarse a s mismo. Este archivo se llama ejecutable.
Un programa escrito en un lenguaje compilado posee la ventaja de no necesitar un programa
anexo para ser ejecutado una vez que ha sido compilado. Adems, como slo es necesaria una
traduccin, la ejecucin se vuelve ms rpida.
En esta ocasion nos centraremos a los lenguajes especializados en programacion funcional los
cuales son los siguientes:
Lenguaje R
Es un lenguaje para anlisis estadstico y grfico creado por Ross Ihaka y Robert Gentleaman.
Los anlisis grficos pueden ser visualizados en su propia ventana, permitiendo ser guardada en
varios formatos(pdf, png, etc), mientras que los resultados de anlisis estadsticos los podemos ver
en la misma pantalla.
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 esta compuesto de listas.
Es un lenguaje til para desarrollar la inteligencia artificial.

Caractersticas, Ventajas y Desventajas de la Programacin Funcional


Como vern todo ambito de programacion tiene determinadas caracteristicas, pros y contras que
en este apartado veremos en un dos por tres:
Caractersticas
Los programas escritos en un lenguaje funcional estn constituidos nicamente por
definiciones de funciones

Jos Luis Prez Ortega

Pgina 3

Programacion Lgica y Funcional


Unidad Pinal de Amoles
La no existencia de asignaciones de variables y la falta de construcciones estructuradas
como la secuencia o la iteracin
Existen dos grandes categoras de lenguajes funcionales: los funcionales puros y
los hbridos
En contraste, los lenguajes funcionales puros tienen una mayor potencia expresiva,
conservando a la vez su transparencia referencial.
Ventajas
Ausencia de efectos colaterales
Proceso de depuracin menos problemtico
Pruebas de unidades ms confiables
Mayor facilidad para la ejecucin concurrente
Desventajas
Falta de estandarizacin
Bajo rendimiento de los programas

Que es Prolog
Ahora nos centraremos en el lenguaje de programacion funcional llamado Prolog, que al igual que
todos los lenguajes de programacion tiene su propia historia, jerarqua e interfaz de programacion.
Es un Lenguaje de programacin lgico e interpretado (Prolog). La programacin lgica es un
paradigma de los lenguajes de programacin en el cual los programas se consideran como una
serie de aserciones lgicas. De esta forma, el conocimiento se representa mediante reglas,
tratndose de sistemas declarativos.
Historia
Prolog es un lenguaje de programacin simple pero poderoso desarrollado en la Universidad de
Aix-Marseille (Marsella, Francia) por los profesores Alain Colmerauer yPhilippe Roussel, como una
herramienta prctica para programacin lgica. Naci de un proyecto que no tena como objetivo
la implementacin de un lenguaje de programacin, sino el procesamiento de lenguajes naturales.
Alain Colmerauer y Robert Pasero trabajaban en la parte del procesado del lenguaje natural y Jean
Trudel y Philippe Roussel en la parte de deduccin e inferencia del sistema. Interesado por el
mtodo de resolucin SL, Trudel persuadi a Robert Kowalski para que se uniera al proyecto,
dando lugar a una versin preliminar del lenguaje Prolog a finales de 1971 y apareciendo la versin
definitiva en 1972. Esta primera versin de Prolog fue programada en ALGOLW.Inicialmente se
trataba de un lenguaje totalmente interpretado hasta que, en 1983, David H.D. Warren desarroll
un compilador capaz de traducir Prolog en un conjunto de instrucciones de una mquina abstracta
denominada Warren Abstract Machine, o abreviadamente, WAM. Desde entonces Prolog es un
lenguaje semi-interpretado.
Si bien en un principio se trataba de un lenguaje de uso reducido, la aparicin de intrpretes del
mismo para microordenadores de 8 bits (ej: micro-PROLOG) y para ordenadores domsticos de 16
bits (ej: Turbo PROLOG de Borland, entre otros muchos) a lo largo de la dcada de 1980contribuy

Jos Luis Prez Ortega

Pgina 4

Programacion Lgica y Funcional


Unidad Pinal de Amoles
notablemente a su popularizacin.Otro importante factor en su difusin fue la adopcin del
mismo para el desarrollo del proyecto de la quinta generacin de computadoras a principios de la
dcada de los 1980, en cuyo contexto se desarroll la implementacin paralelizada del lenguaje
llamada KL1 y del que deriva parte del desarrollo moderno de Prolog. Las primeras versiones del
lenguaje diferan, en sus diferentes implementaciones, en muchos aspectos de sus sintaxis,
emplendose mayormente como forma normalizada el dialecto propuesto por la Universidad
de Edimburgo , hasta que en 1995 se estableci un estndar ISO (ISO/IEC 13211-1), llamado ISOProlog.
Entorno de desarrollo Prolog
Prolog es un lenguaje de programacin seminterpretado. Su funcionamiento es muy similar a Java.
El cdigo fuente se compila a un cdigo de byte el cul se interpreta en una mquina virtual
denominada Warren Abstract Machine (comnmente denominada WAM).
Por eso, un entorno de desarrollo Prolog se compone de:
Un compilador: Transforma el cdigo fuente en cdigo de byte. A diferencia de Java, no
existe un Standard al respecto. Por eso, el cdigo de byte generado por un entorno de
desarrollo no tiene por que funcionar en el intrprete de otro entorno.
Un intrprete: Ejecuta el cdigo de byte. Un shell o top-level. Se trata de una utilidad que
permite probar los programas, depurarlos, etc. Su funcionamiento es similar a los
interfaces de lnea de comando de los sistemas operativos.
Una biblioteca de utilidades: Estas bibliotecas son, en general, muy amplias. Muchos entornos
incluyen (afortunadamente) unas bibliotecas standard-ISO que permiten funcionalidades bsicas
como manipular cadenas, entrada/salida, etc.
Generalmente, los entornos de desarrollo ofrecen extensiones al lenguaje como pueden ser la
programacin con restricciones, concurrente, orientada a objetos, etc. Sera injusto no mencionar
aqu el entorno de desarrollo ms popular: SICStus Prolog, si bien, se trata de un entorno de
desarrollo comercial (no gratuito).
SICStus, CIAO Prolog, y posiblemente otros ms, ofrecen entornos integrados generalmente
basados en Emacs que resultan muy fciles de usar. CIAO Prolog adems ofrece un auto
documentador similar al existente para Java adems de un preprocesador de programas.
Prcticamente todos ellos son multiplataforma.
Elementos en Prolog
Como hemos especificado antes, para construir programas en Prolog necesitamos una serie de
elementos. Vamos a especificarlos:
tomos: Es una definicin genrica de un objeto del mundo que queremos representar.
Predicados: Nos permite especificar caractersticas de los objetos de nuestro mundo o las
relaciones entre ellos.

Jos Luis Prez Ortega

Pgina 5

Programacion Lgica y Funcional


Unidad Pinal de Amoles
Variables
No es variable con el concepto que se tiene de ella en la programacin habitual. En Prolog, una
variable representa el valor de un tomo. Representan objetos que el mismo PROLOG determina.
Una variable puede estar instanciada no instanciada. Estar instanciada cuando existe un objeto
determinado representado por la variable. Los nombres de variables comienzan siempre por una
letra mayscula.
Un caso particular es la variable annima, representada por el carcter subrayado ("_"). Es una
especie de comodn que utilizaremos en aquellos lugares que debera aparecer una variable, pero
no nos interesa darle un nombre concreto ya que no vamos a utilizarla posteriormente.
Reglas
Las reglas se utilizan en PROLOG para significar que un hecho depende de uno mas hechos. Son
la representacin de las implicaciones lgicas del tipo p ---> q (p implica q).
Una regla consiste en una cabeza y un cuerpo, unidos por el signo ":-".
La cabeza est formada por un nico hecho.
El cuerpo puede ser uno mas hechos (conjuncin de hechos), separados por una coma
(","), que acta como el "y" lgico.
Las reglas finalizan con un punto (".").
La cabeza en una regla PROLOG corresponde al consecuente de una implicacin lgica, y el cuerpo
al antecedente. Este hecho puede conducir a errores de representacin. Supongamos el siguiente
razonamiento lgico: tiempo(lluvioso) ----> suelo(mojado) suelo(mojado)
Que el suelo est, mojado, es una condicin suficiente de que el tiempo sea lluvioso, pero no
necesaria. Por lo tanto, a partir de ese hecho, no podemos deducir mediante la implicacin, que
est, lloviendo (pueden haber regado las calles). La representacin correcta en PROLOG, sera:
suelo(mojado):- tiempo(lluvioso). suelo(mojado).
Advirtase que la regla est "al revs". Esto es as por el mecanismo de deduccin hacia atrs que
emplea PROLOG. Si cometiramos el error de representarla como:
tiempo(lluvioso):- suelo(mojado). suelo(mojado).
PROLOG, partiendo del hecho de que el suelo est mojado, deducira incorrectamente que el
tiempo es lluvioso. Para generalizar una relacin entre objetos mediante una regla, utilizaremos
variables. Por ejemplo:
Representacin lgica Representacin PROLOG es_un_coche(X) ----> tiene(X,ruedas)
tiene(X,ruedas):- es_un_coche(X).

Jos Luis Prez Ortega

Pgina 6

Programacion Lgica y Funcional


Unidad Pinal de Amoles
Con esta regla generalizamos el hecho de que cualquier objeto que sea un coche, tendr ruedas.
Al igual que antes, el hecho de que un objeto tenga ruedas, no es una condicin suficiente de que
sea un coche. Por lo tanto la representacin inversa sera incorrecta.

Jos Luis Prez Ortega

Pgina 7

Das könnte Ihnen auch gefallen