Está en la página 1de 20

Programación Lógica y

Funcional
Unidad 2. Programación
Funcional
ISC. GABRIEL UBALDO GONZÁLEZ CAUICH
Lenguajes Funcionales
Los primeros ordenadores se construyeron en los años cuarenta. Los primerísimos modelos
fueron ‘programados’ con grandes relés. Pronto se almacenaron los programas en la memoria del
ordenador, haciendo que los primeros lenguajes de programación hicieran su entrada.

En aquel tiempo el uso de un ordenador era muy costoso y era lógico que el lenguaje de
programación guardara mucha relación con la arquitectura del ordenador. Un ordenador consta de
una unidad de control y una memoria. Por eso un programa consistía en instrucciones para
cambiar el contenido de la memoria.

La unidad de control se encargaba de ejecutarlas. De esta manera se creó la programación


imperativa. Los lenguajes de programación imperativa como Pascal y C se caracterizan por la
existencia de asignaciones ejecutadas consecutivamente.

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


Lenguajes Funcionales
Antes de la existencia de los ordenadores se inventaron métodos para resolver problemas. Por
tanto, no existía la necesidad de hablar en términos de una memoria que cambie por
instrucciones en un programa. En la matemática de los últimos cuatrocientos años son muy
importantes las funciones. Éstas establecen la relación entre los parámetros y el resultado de
procesos definidos.

Con cada computación, el resultado depende de una u otra forma de los parámetros. Por esa
razón, una función es una buena manera de especificar una computación. Ésta es la base de la
programación funcional. Un ‘programa’ consiste en la definición de una o más funciones. Para la
ejecución de un programa, se dan parámetros a una función y el ordenador tiene que calcular el
resultado.

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


Lenguajes funcionales
La base teórica de la programación imperativa fue dada (en Inglaterra) por Alan Turing en los
años treinta.
También la teoría de funciones como modelo de computación proviene de los años veinte y
treinta. Los fundadores son, entre otros, M. Schönfinkel (en Alemania y Rusia), Haskell Curry (en
Inglaterra) y Alonzo Church (en los Estados Unidos).

Fue en el comienzo de los años cincuenta cuando a alguien se le ocurrió usar esta teoría
efectivamente, como base de un lenguaje de programación. El lenguaje Lisp de John McCarthy
fue el primer lenguaje de programación funcional y fue el único por muchos años. Aunque
todavía se usa Lisp, no es un lenguaje que reuna las exigencias.

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


Lenguajes funcionales
 Debido a la creciente complejidad de los programas de ordenador, se hizo necesaria una
mayor verificación del programa por parte de el ordenador. Por ello el tipado adquirió una gran
importancia. Por eso no es de extrañar que en los años ochenta se crearan un gran número de
lenguajes funcionales tipados. Algunos ejemplos son ML, Scheme (una adaptación de Lisp),
Hope y Miranda.

A la larga, cada investigador se dedicó a desarrollar su propio lenguaje. Para detener este
crecimiento incontrolado, un grupo de investigadores notables concibió un lenguaje que incluía
todas las mejores cualidades de los diferentes lenguajes. Este lenguaje se llama Haskell.
Las primeras implementaciones de Haskell fueron hechas a comienzos de los años noventa.
Este lenguaje es bastante ambicioso y de difícil implementación.

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


Calcular Expresiones
En un lenguaje funcional se pueden definir funciones. Estas funciones se usan en una expresión
cuyo valor tiene que ser calculado. Para calcular el valor de una expresión se necesita un
programa que entienda las definiciones de las funciones. Tal programa se llama intérprete.

En el fichero prelude están las definiciones de las funciones estándar. Lo primero que hace el
intérprete de Haskell es analizar estas funciones estándar. ‘Prelude’ significa ‘preludio’: este
archivo se examina antes de que se puedan definir nuevas funciones.

En el prelude están definidas, entre otras, las funciones aritméticas. Por eso, se puede usar el
intérprete como calculadora.

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


Actividad de aprendizaje 1.
Práctica.
1. Descargue e instale el compilador para Haskell.
2. Responda las siguientes preguntas.
A) Describa cómo es el entorno
B) ¿Con qué herramientas cuenta?
C) ¿Es como te lo esperabas? ¿Por qué?
D) Discute con tus compañeros lo que observaste.

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


El intérprete de Haskell
Ejemplos

Prelude> 5+2*3
Prelude> sqrt(2.0) o Prelude> sqrt 2.0 que es un lenguaje más natural.
Prelude> sin 0.3*sin 0.3+cos 0.3*cos 0.3
Prelude> sum [1..10]
Prelude>length[1,5,9,3]
Prelude>reverse[1..10]

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


El intérprete de Haskell
Ejemplos

Prelude> import Data.List (sort)


Prelude Data.List> sort[3,7,5,10]
Prelude Data.List>reverse( sort[3,7,5,10])

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


Actividad de Aprendizaje 2. Realice los
siguientes ejercicios resueltos
1. Dada la siguiente lista de números [ 12, 34, 56, 78, 90, 1, -67, 0]
a) Encuentre el mayor
maximum [12, 34, 56, 78, 90, 1, -67, 0]
R: 90
b) Encuentre el menor
minimum [12, 34, 56, 78, 90, 1, -67, 0]
R: -67

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


Actividad de Aprendizaje 2. Realice los
siguientes ejercicios resueltos
2. Dada la siguiente lista de números [ 1.5, 0.34, 8.9, 0.05, 4.3, 1, 0, 1.02]
a) Obtenga la suma todos los elementos de la lista
sum[ 1.5, 0.34, 8.9, 0.05, 4.3, 1, 0, 1.02]
R: 17.11
b) Ordena los elementos en orden ascendente
import Data.List
sort[ 1.5, 0.34, 8.9, 0.05, 4.3, 1, 0, 1.02]
R: [0.0,5.0e-2,0.34,1.0,1.02,1.5,4.3,8.9]

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


Actividad de Aprendizaje 2. Realice los
siguientes ejercicios resueltos
3. Dada la siguiente lista de números [ 1007, 80090, 25000, 42000, 7500, 9200, 3100, 15001]
a) Obtenga el promedio de los números
sum[1007,80090,25000,42000, 7500, 9200,3100,15001]/8
R: 22862.25
b) Ordena los elementos en orden descendente
import Data.List
reverse(sort[1007,80090,25000,42000, 7500, 9200,3100,15001])
R: [80090,42000,25000,15001,9200,7500,3100,1007]

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


Actividad de aprendizaje 3. Ejercicios
4. Obtén el seno de 45.
5. Dada la siguiente lista [23, 56, 78, 10, 25, 9, 66, 89]
◦ a) Use la función adecuada para eliminar el primer elemento de la lista.
◦ b) Una vez eliminado, ordene en forma descendente. El resultado deberá arrojar [89,78,66,56,25,10,9]
◦ c) Muestre el primer elemento de la lista
◦ d) Muestre el último elemento de la lista
◦ e) Muestre el tamaño de la lista

6. Obtenga la raíz cuadrada del elemento mayor: R: 9.433981132056603


7. Eleve al cubo el elemento menor: R: 729

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


Aplicaciones de las Listas:
Comprensión de Listas
Las listas son una representación de un conjunto ordenado de elementos. Dichos elementos
pueden ser de cualquier tipo, ya sean Int, Bool, Char, ...Siempre y cuando todos los elementos
de dicha lista compartan tipo. En Haskell las listas se representan:
ghci> [1,2,3,4]
[1,2,3,4]
ghci> [1..4]
[1,2,3,4]

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


Ejercicios de repaso

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


Ejercicios de repaso

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


Ejercicios de repaso

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


Ejercicios de repaso

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


Ejercicios de repaso
En los 10 ejercicios de repaso vistos en las diapositivas anteriores, sustituya la lista numérica
[1,2,3,4,5] por una lista de caracteres y aplique los cálculos vistos siempre y cuando se pueda
aplicar.

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH


Gracias por su atención

ELABORÓ: GABRIEL UBALDO GONZÁLEZ CAUICH

También podría gustarte