Download - Programacion Logica y Funcional
-
PROGRAMACIN LGICA Y FUNCIONAL
Hctor Andrade A/D 2013
-
Paradigmas de Programacin
Imperativa: Le decimos a la computadora como debe resolver el problema. Lenguages: C, C++, Java, Delphi, etc.
Declarativa: Le decimos a la computadora qu debe hacerse. Lenguajes: SQL, Haskell, PROLOG, etc.
En este curso veremos:
Programacin funcional: Haskell (jaskl)
Programacin Lgica: PROLOG As pronuncia!
-
Ejemplo: Factorial Java:
Haskell:
Haskell (ms simple):
-
Otro Ejemplo
Java:
Haskell:
-
Programa de Estudios
1. Conceptos Fundamentales
1.1. Estilos de programacin.
1.2. Evaluacin de expresiones.
1.3. Definicin de funciones.
1.4. Disciplina de tipos.
1.5. Tipos de datos.
-
Programa de Estudios
2. Programacin Funcional
2.1. El tipo de datos.
2.2. Funciones.
2.3. Intervalos.
2.4. Operadores.
2.5. Aplicaciones de las listas.
2.6. rboles.
-
Programa de Estudios
3. Evaluacin Perezosa
3.1. La estrategia de evaluacin perezosa.
3.2. Tcnicas de programacin funcional
perezosa.
-
Programa de Estudios 4. Programacin Lgica
4.1. Repaso de la lgica de primer orden.
4.2. Unificacin y resolucin.
4.3. Clusulas de Horn. Resolucin
4.4. Programacin lgica con clusulas
de Horn.
4.5. Semntica de los programas lgicos.
4.6. Representacin clausada del conocimiento.
-
Programa de Estudios
4.7. Consulta de una base de clusulas
4.8. Espacios de bsqueda.
4.9. Programacin lgica con nmeros,
listas y rboles.
4.10. Control de bsqueda en programas
lgicos
4.11. Manipulacin de trminos.
Predicados metalgicos.
-
Evaluacin
Actividades y prcticas (40%)
Exmenes en la computadora (60%)
-
www.haskell.org
Haskell es un lenguaje funcional moderno puro
Permite el desarrollo de software de manera concisa y correcta
Permite una integracin fuerte con otros lenguajes
Concurrencia y paralelismo integrados en el lenguaje
Debuggers,profilers y una gran cantidad de librerias
Comunidad muy activa
Haskell facilita la produccin de software flexible, mantenible y de alta calidad*
*Tomado de la pgina. Podra estar un poco sesgado
-
Documentacin Haskell
www.haskell.org
aprendehaskell.es
www.learnyouhaskell.com
www.fpcomplete.com
Aqu se obtiene
tambin el compilador
-
Instalar Haskell
http://www.haskell.org
-
Usando Haskell
Se puede utilizar en modo comando (GHCi)
O en modo ventana (WinGHCi)
-
Programacin funcional
En la programacin funcional los programas se ejecutan evaluando expresiones.
En la programacin imperativa en los programas se componen de instrucciones.
Las instrucciones de la programacin imperativa cambian el estado global del programa. En la programacin funcional el estado es generalmente inmutable
-
Haskell Programs
Un programa en Haskell es una serie de comentarios y definiciones de funciones
Cada comentario comienza con -- (o entre {- y-})
Cada definicin contiene una declaracin del tipo de la funcin y una o ms ecuaciones:
-
Funcin
Una funcin es un mapeo entre dos conjuntos.
El conjunto de valores de entrada (dominio) y el conjunto de valores de salida (rango)
-
Funciones en haskell
Crear un archivo (extensin: .hs)
Grabarlo!!
Cargarlo desde WinGHCi
-
Ejemplos
-
Ejercicios:
1. Escriba una funcin que calcule el rea de un rectngulo dadas la base y la altura (Use Float para los parmetros y el tipo del valor de retorno)
2. Escriba una funcin que calcule el rea de un circulo dado el radio (Use Float para los parmetros y el tipo del valor de retorno)
3. Escriba una funcin que calcule el volumen de un cilindro dado el radio y la altura (utilice la funcin del ejercicio anterior)
-
If
La funcin if (en haskell TODO es una funcin) regresa un valor de acuerdo a una expresin boleana. Ejemplo: mayorDeDos :: Int->Int->Int mayorDeDos n m = if (n > m) then n else m
Ejercicio: Defina una funcin que regrese el mayor de tres
nmeros. Ejemplo: mayorDeTres 4,5,2 5
-
Recursin En la programacin funcional pura no hay
ciclos!!
Por lo tanto se utiliza recursin para resolver problemas que requieren repeticin de instrucciones
La recursin consiste en definir una funcin utilizando la misma funcin!! (Pero siempre con un caso base)
-
Ejemplos
Factorial: factorial :: Integer -> Integer
factorial 0 = 1
factorial n = n * factorial (n - 1)
Nmeros de fibonacci: fibonacci :: Integer -> Integer
fibonacci 0 = 1
fibonacci 1 = 1
fibonacci n = fibonacci (n-1) + fibonacci (n - 2)
Nota: Em estos ejemplos se usa pattern matching
-
Ejercicios
Escribir funciones haskell para Encuentre la suma angular de un nmero n
(1+2+3+n)
Multiplicar dos nmeros enteros positivos sin usar el operador de multiplicacin (usar la suma)
Dividir dos nmeros enteros (divisin entera utilizando solo la resta)
-
Tipos
Haskell es un lenguaje fuertemente tipeado
Se conoce el tipo de cada variable y cada expresin al momento de compilacin
Esto es bueno porque una mayor cantidad de errores se detectan en tiempo de compilacin
Tambin maneja inferencia de tipos. Aunque no se declaren explcitamente, el compilador puede inferirlos
-
Tipos de Expresiones
-
Las funciones tambin tienen tipos:
-
Tipos en Haskell
Int Enteros con lmite
Integer Enteros sin lmite
Float Flotantes de precisin simple
Double Flotantes de doble precisin
-
Tipos en Haskell
Bool b0oleanos (True o False) Char Caracteres (a, b, etc..) Tambin se pueden formar tuplas y listas. Por
ejemplo: (3,7.2) (Int,Float) [3,4,5][Int] Todos los elementos en una lista deben ser del
mismo tipo pero las tuplas pueden tener diferentes tipos de elementos.
Ordering Solo puede tener tres valores LT, EQ y GT
-
Variables de tipos
Los tipos en Haskell comienzan con maysculas
Tambin existen variables que representan tipos. Ejemplo:
La funcin fst regresa el primer elemento de una dupla:
Cul es el tipo de la funcin fst?
-
Variables de Tipos
:t es una funcin que regresa el tipo de una expresin
La expresin (a,b)-> a significa que la funcin fst recibe cualquier pareja de elementos de cualquier tipo y regresa un valor del mismo tipo del primer elemento
En este caso, a y b son variables de tipos
-
Ejemplo: La funcin head
-
Clases de tipos
Las clases de tipos es un concepto similar a una interface del lenguaje Java. Definen cierto comportamiento de los valores.
Num A esta clase pertenecen los tipos numricos Eq A esta clase pertenecen tipos de valores que
puede determinarse si son iguales Ord A esta clase perteneces tipos de valores que se
pueden comparar (mayor que, menor que, igual) Show Son valores que pueden ser representados
como strings (Todos excepto las funciones) Enum Son secuencias de valores Bounded Valores que tienen mnimo y mximo
-
Ejemplos
-
Ejercicios:
Capture las siguientes funciones. Determine su tipo. Posteriormente compruebe si el tipo es el esperado utilizando el comando :t
suma n m = n + m
mayor n m = if m > n then m else n
soloNumerosGrandes n = if n>100 then n else 0
soloLetrasGrandes n = if n>'L' then n else 'A'
misterio k l m o = (k * l) / (m * o)
-
Declaracin explcita de tipos Podemos realizar una declaracin explcita de
tipos en las expresiones. Ejemplo:
-
Comparacin de patrones (pattern matching)
-
Pattern Matching (ejemplos)
-
Mas ejemplos de P.M.
-
Mas sobre P.M.
-
Uso de Guards
Se utilizan para verificar condiciones. En algunos casos pueden resultar ms convenientes que un if then else
Dejar al menos un espacio!!
-
Where
-
Let.. in
Estas identaciones no son opcionales!!