Programacion Logica y Funcional



Comments



Description

PROGRAMACIÓN LÓGICA YFUNCIONAL Héctor Andrade A/D 2013 Paradigmas de Programación  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:  Programación funcional: Haskell (“jaskl”)  Programación Lógica: PROLOG Así pronuncia! Ejemplo: Factorial Java: Haskell: Haskell (más simple): Otro Ejemplo Java: Haskell: Conceptos Fundamentales  1.Programa de Estudios  1.5. Definición de funciones.  1. .  1. Disciplina de tipos. Estilos de programación. Evaluación de expresiones.1. Tipos de datos.  1.3.  1.4.2. 5.Programa de Estudios  2. Funciones.4. Programación Funcional  2. Intervalos. El tipo de datos.  2.1.3.  2.6. Aplicaciones de las listas.  2.  2. Árboles. .2.  2. Operadores. Evaluación Perezosa  3. Técnicas de programación funcional  perezosa.2.Programa de Estudios  3. La estrategia de evaluación perezosa. .1.  3. Cláusulas de Horn.Programa de Estudios  4. Unificación y resolución.  4.4.  4.5. . Programación lógica con cláusulas  de Horn. Repaso de la lógica de primer orden.  4. Representación clausada del conocimiento.2.1. Semántica de los programas lógicos. Programación Lógica  4.3.  4.6. Resolución  4. Control de búsqueda en programas  lógicos  4.  listas y árboles.8. Consulta de una base de cláusulas  4.10. Espacios de búsqueda.  4.11.  Predicados metalógicos. Manipulación de términos.9.7. Programación lógica con números. .  4.Programa de Estudios  4. Evaluación  Actividades y prácticas (40%)  Exámenes en la computadora (60%) . org  Haskell es un lenguaje funcional moderno puro  Permite el desarrollo de software de manera concisa y      correcta Permite una integración fuerte con otros lenguajes Concurrencia y paralelismo integrados en el lenguaje Debuggers.haskell.www. Podría estar un poco “sesgado” . mantenible y de alta calidad* *Tomado de la página.profilers y una gran cantidad de librerias Comunidad muy activa Haskell facilita la producción de software flexible. org  aprendehaskell.Documentación Haskell  www.com Aquí se obtiene también el compilador .fpcomplete.haskell.es  www.com  www.learnyouhaskell. haskell.Instalar Haskell  http://www.org . Usando Haskell  Se puede utilizar en modo comando (GHCi)  O en modo ventana (WinGHCi) . Programación funcional  En la programación funcional los programas se ejecutan evaluando expresiones.  En la programación imperativa en los programas se componen de instrucciones. En la programación funcional el estado es generalmente inmutable .  Las instrucciones de la programación imperativa cambian el estado global del programa. Haskell Programs  Un programa en Haskell es una serie de comentarios y definiciones de funciones  Cada comentario comienza con “--” (o entre “{-” y“-}”)  Cada definición contiene una declaración del tipo de la función y una o más ecuaciones: . Función  Una función es un “mapeo” entre dos conjuntos.  El conjunto de valores de “entrada” (dominio) y el conjunto de valores de “salida” (rango) . hs)  Grabarlo!!  Cargarlo desde WinGHCi .Funciones en haskell  Crear un archivo (extensión: . Ejemplos . Ejercicios: 1. 3. Escriba una función que calcule el área de un rectángulo dadas la base y la altura (Use Float para los parámetros y el tipo del valor de retorno) Escriba una función que calcule el área de un circulo dado el radio (Use Float para los parámetros y el tipo del valor de retorno) Escriba una función que calcule el volumen de un cilindro dado el radio y la altura (utilice la función del ejercicio anterior) . 2. If  La función if (en haskell TODO es una función) regresa un valor de acuerdo a una expresión boleana.2  5 .5. Ejemplo:  mayorDeDos :: Int->Int->Int  mayorDeDos n m = if (n > m) then n else m  Ejercicio:  Defina una función que regrese el mayor de tres números. Ejemplo:  mayorDeTres 4. Recursión  En la programación funcional pura no hay ciclos!!  Por lo tanto se utiliza recursión para resolver problemas que requieren repetición de instrucciones  La recursión consiste en definir una función utilizando la misma función!! (Pero siempre con un caso base) . 2) Nota: Em estos ejemplos se usa “pattern matching” .1)  Números de fibonacci: fibonacci :: Integer -> Integer fibonacci 0 = 1 fibonacci 1 = 1 fibonacci n = fibonacci (n-1) + fibonacci (n .Ejemplos  Factorial: factorial :: Integer -> Integer factorial 0 = 1 factorial n = n * factorial (n . Ejercicios  Escribir funciones haskell para  Encuentre la suma angular de un número n (1+2+3+…n)  Multiplicar dos números enteros positivos sin usar el operador de multiplicación (usar la suma)  Dividir dos números enteros (división entera utilizando solo la resta) . Aunque no se declaren explícitamente. el compilador puede inferirlos .Tipos  Haskell es un lenguaje fuertemente “tipeado”  Se conoce el tipo de cada variable y cada expresión al momento de compilación  Esto es bueno porque una mayor cantidad de errores se detectan en tiempo de compilación  También maneja “inferencia de tipos”. Tipos de Expresiones . Las funciones también tienen tipos: . Tipos en Haskell  Int – Enteros con límite  Integer – Enteros sin límite  Float – Flotantes de precisión simple  Double – Flotantes de doble precisión . )  También se pueden formar tuplas y listas. Por ejemplo:  (3.7.  Ordering – Solo puede tener tres valores LT.Float)  [3.Tipos en Haskell  Bool – b0oleanos (True o False)  Char – Caracteres (‘a’.4.. EQ y GT .2)  (Int. ‘b’. etc.5][Int]  Todos los elementos en una lista deben ser del mismo tipo pero las tuplas pueden tener diferentes tipos de elementos. Variables de tipos  Los tipos en Haskell comienzan con mayúsculas  También existen variables que representan tipos. Ejemplo:  La función fst regresa el primer elemento de una dupla: ¿Cuál es el tipo de la función fst? . b)-> a significa que la función 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 .Variables de Tipos  :t es una función que regresa el tipo de una expresión  La expresión (a. Ejemplo: La función head . Num – A esta clase pertenecen los tipos numéricos 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. igual) Show – Son valores que pueden ser representados como strings (Todos excepto las funciones) Enum – Son secuencias de valores Bounded – Valores que tienen mínimo y máximo . menor que. Definen cierto comportamiento de los valores.Clases de tipos  Las clases de tipos es un concepto similar a una       interface del lenguaje Java. Ejemplos . . 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) . Determine su tipo.Ejercicios:  Capture las siguientes funciones. . Declaración explícita de tipos  Podemos realizar una declaración explícita de tipos en las expresiones. Ejemplo: . Comparación de patrones (pattern matching) . Pattern Matching (ejemplos) . .M.Mas ejemplos de P. Mas sobre P.M. . Uso de “Guards”  Se utilizan para verificar condiciones. En algunos casos pueden resultar más convenientes que un if then else Dejar al menos un espacio!! . Where . Let.. in Estas identaciones no son opcionales!! .
Copyright © 2024 DOKUMEN.SITE Inc.