programacion logica y funcional

45
PROGRAMACIÓN LÓGICA Y FUNCIONAL Héctor Andrade A/D 2013

Upload: abraham-hernandez

Post on 09-Nov-2015

250 views

Category:

Documents


11 download

DESCRIPTION

una pequeña descripcion de los que es PROLOG

TRANSCRIPT

  • 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!!