Programación Funcional Haskell Clase 21

Documentos relacionados
Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Tema 3: Tipos y clases

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Tema 3: Tipos y clases

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes:

Programación Funcional en Haskell

Instituto Tecnológico de Celaya

En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C.

Programación. Test Autoevaluación Tema 3

El lenguaje C. 1. Identificadores, constantes y variables

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Principios de Computadoras II

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

Tipos de Datos de python (1ª parte):

FUNDAMENTOS DE INFORMÁTICA

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Isabelle como un lenguaje funcional

INICIACIÓN A LA PROGRAMACIÓN EN C

TUTORIAL PSEINT. Ing. Ronald Rentería Ayquipa. Fundamentos de Programación

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas

Curso de Programación Avanzada en C

Introducción a los Algoritmos Validez, Satisfactibilidad, Tipos y Funciones

OPERADORES Y EXPRESIONES

GRAMATICAS LIBRES DEL CONTEXTO

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

En matemáticas el concepto de conjunto es considerado primitivo y no se da una definición de este, por lo tanto la palabra CONJUNTO debe aceptarse

Introducción a la Programación 11 O. Humberto Cervantes Maceda

EJERCICIOS DE LENGUAJES Y PARADIGMAS DE PROGRAMACIÓN (CUESTIONES DE EXAMEN) PROGRAMACIÓN FUNCIONAL

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Tema 11. Listas infinitas

Definición de Memoria

Datos y tipos de datos

Lenguajes de programación

Datos y tipos de datos

Lección 2 Introducción al lenguaje C

Lógica y Programación

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas.

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Matemáticas aliadas a la salud MATE3035

Formato para prácticas de laboratorio

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

data Tree a = Tip Node a (Tree a) (Tree a) deriving Show

INTRODUCCIÓN AL LENGUAJE C

LENGUAJE DE PROGRAMACION I. Ing. JAVIER ECHEGARAY ROJO Ing. WILDER ROMAN MUNIVE. Ing. Javier Echegaray Rojo / Ing. Wilder Román Munive Pag 1

1 ELEMENTOS BASICOS DEL LENGUAJE

ESTRUCTURA DE COMPUTADORES I (Capítulo 16:El Teclado) 1/5 16-EL TECLADO

Tema 13: Programas interactivos

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

Ejercicio 3 Funciones Parte 1.

Representación de la información

Manual de turbo pascal

Complejidad computacional (Análisis de Algoritmos)

Tema 13: Aplicaciones de programación funcional

Teoría de Conjuntos y Conjuntos Numéricos

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

Tema 3. Tipos de datos simples

Programación en java. Estructuras algorítmicas

INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN. Métodos Numéricos Carlos Zotelo

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

PHP: Lenguaje de programación

DOCUMENTACIÓN PARA EL TRABAJO CON LA PLATAFORMA GUADALBOT

Elementos de un programa en C


ARITMÉTICA MODULAR. Unidad 1

TP N 4 Redirección de entrada y salida estándar

Laboratorio de Arquitectura de Redes. Entrada y salida estándar

Programcaión Básica. Arreglos y Estructuras de Datos (2)

Tema 7. El sistema de clases

Guía 2: Funciones, listas, recursión e inducción

GUÍA BÁSICA DE SCHEME v.4

Ejercicio 1 (2 puntos. Tiempo: 25 minutos)

VARIABLES Y CONSTANTES

Informática Ingeniería en Electrónica y Automática Industrial

Tema 2: Los tipos de datos

Fundamentos de la programación

CONCEPTOS BASICOS DEL LENGUAJE JAVA

Universidad de Pamplona Materia: Programación 1 Docente: Ing. Lusbin Raúl Vargas LENGUAJE C ESTRUCTURA DE UN PROGRAMA EN C

Hoja de ejercicios del Tema 3

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

Introducción al lenguaje C

Tipos primitivos y clases de interés

Estatutos de Control C# Estatutos de Decisión (Selección)

Representación de la Información

Ejercicios de programación funcional con Haskell

Tema 3.- Predicados y sentencias condicionales

Programación Básica. Martin Méndez Facultad de Ciencias Universidad Autónoma de San Luis Potosí

Exterior del algoritmo. Entorno. Usuario. Procesador. Escribir. v1 v2 v3. Leer. <acción> {; <acción>}

Sintaxis básica, variables y 7pos

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Es toda la información que utiliza el computador. Según sea la información que guardemos en los datos, se clasifican en los siguientes tipos:

Tema 3 Constantes, Variables y Tipos

ALGEBRA DE BOOLE George Boole C. E. Shannon E. V. Hungtington [6]

Tema Árboles generales. 9.2 Árboles binarios 9.3 Árboles de búsqueda

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Tema 2. El lenguaje de programación Java (Parte 1)

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

Programación Funcional

Transcripción:

Programación Funcional Haskell Clase 21 José Raymundo Marcial Romero rmarcial@fi.uaemex.mx BUAP c José Raymundo Marcial Romero. Clase Número 21 p.1/12

Temas de la clase Clase Anterior En Haskell cada expresión bien formada tiene un tipo Tipos polimórficos y clases tipo Esta clase Tipos y clases preconstruidos en las librerías de Haskell Caracteres Listas c José Raymundo Marcial Romero. Clase Número 21 p.2/12

Caracteres Los caracteres (letras, dígitos y caracteres especiales) son el medio de comunicación entre las personas y las computadoras mediante teclados como entrada y pantallas como salida. Haskell tiene un tipo preconstruido para caracteres, llamado Char, el cual contiene 256 caracteres, los cuales se representan encerrandolos en comillas simples, por ejemplo: 7, b. Algunos caracteres especiales se representan de la siguiente manera: \ t (tab) \ n (Línea nueva) \\ (backslash) \ (comilla simple) \ (comilla doble) c José Raymundo Marcial Romero. Clase Número 21 p.3/12

Funciones del tipo Char El código ASCII sirve para representar los caracteres como enteros, por ejemplo, las letras mayusculas A a z tienen la secuencia de códigos desde 65 hasta 90. Note que el caracter con código 98 se puede escribir como \ 98 ( b y \ 98 tienen el mismo significado). Dos funciones primitivas para el manejo de caracteres son: ord :: Char -> Int chr :: Int -> Char Si se toma en cuenta ésta conversión, los caracteres pueden ser comparados y ordenados. La ordenación permite la definición de algunas funciones simples, como: isupper:: Char -> Bool isupper ch = A <= ch && ch <= Z c José Raymundo Marcial Romero. Clase Número 21 p.4/12

Listas (o secuencias) Una lista es una coleción de elementos linealmente ordenados, todos del mismo tipo, por ejemplo: [1, 2, 3, 34, 21, 150] :: [Int] [ h, e, l, l, o ] :: [Char] [[1, 2], [23], [456, 67, 200]] :: [[Int]] [(+), ( )] :: [Int > Int > Int] El tipo lista es un tipo de datos sumamente expresivo: un texto puede representarse como una lista de ĺıneas, cada una de las cuales es una lista de palabras; una colección de mediciones puede representarse como una lista de números de punto flotante. Las funciones recursivas se pueden definir sobre listas, usualmente por pattern matching. c José Raymundo Marcial Romero. Clase Número 21 p.5/12

Construcción de listas Un caso especial de lista es la lista vacía [], que no contiene elementos. La lista vacía es un elemento de cualquier lista, y esta definida para cada tipo de lista, es decir: [] :: [a] Una lista de caracteres es una cadena: [ h, e, l, l, o ] == hello Existen diferentes formas de construir una lista Comenzando con la lista vacía y agregandole elementos uno por uno, usando el operador (:) :: a-> [a] -> [a] [n..m] que significa [n, n + 1, n + 2,..., m] [n, p,..m] que significa la lista cuyos primeros dos elementos son n y p y cuyo último elemento es m, y los elementos restantes incrementando (decrementando) en p n pasos. Empleando una notación particular llamada list comprehesion (las listas que se escriben con esta notación también se conocen como expresiones ZF). c José Raymundo Marcial Romero. Clase Número 21 p.6/12

Empleando el operador (:) Ejemplos -1 [1,2,3] == 1: (2: (3:[])) = 1:2:3:[] 2:[8,13] == [2,8,13] h : "askell" == "haskell" Empleando la notación [n..m] [1.. 10] == [1,2,3,4,5,6,7,8,9,10] [ a.. f ] == "abcdef" [3.1.. 7.1] == [3.1, 4.1, 5.1, 6.1, 7.1] Empleando la notación [n, p..m] [3,5.. 13] == [3,5,7,9,11,13] [7,6.. 3] == [7,6,5,4,3] [ a, c,.. n ] == "acegikm" c José Raymundo Marcial Romero. Clase Número 21 p.7/12

Ejemplos-2 Empleando list comprehesion [2 n n [2, 4, 7]] == [4, 8, 14] esto se lee como: devuelve 2 n donde n proviene de [2,4,7] [x x x [1..5], even x] == [4, 16] esto se lee como: devuelve todos los x x donde x proviene de [1,2,3,4,5] y x es par. La forma general de una expresión ZF es: [< exp > < qual >,..., < qual >] donde < qual > es una expresión booleana o un generador. Un generador es algo de la forma: <variable> <- <list> <pattern> <- <list> c José Raymundo Marcial Romero. Clase Número 21 p.8/12

Nombres, cadenas y caracteres No confundir una, a y a a es un nombre o una variable; que puede tener un tipo a es un caracter y su tipo es Char a es una cadena y es de tipo [Char] No confundir apple y apple apple es un nombre o una variable, mientras que apple es una cadena. No confundir 9 y 9 9 es un número mientras que 9 es un caracter. c José Raymundo Marcial Romero. Clase Número 21 p.9/12

Funciones sobre listas head,last :: [a] > a El primer/último elemento de la lista, por ejemplo: head[7,18,3] == 7 last[7,18,3] == 3 tail,init :: [a] > [a] El complemento de primer/último tail[7,18,3] == [18,3] init[7,18,3] == [7,18] length :: [a] > Int La longitud de la lista, por ejemplo, length apple == 5 (!!) :: [a] > Int xs!!n regresa el nth elemento de xs, comenzando en el inicio y contando desde 0, por ejemplo [1,2,3,4]!!1 == 2 time!!2 == m (++) :: [a] > [a] > [a] Une dos listas, por ejemplo, c José Has Raymundo + Marcial + kell Romero. == Clase Haskell Número 21 p.10/12

attern matching en funciones recursivas Queremos definir una función sumlist tal que sumlist[1,2,3,4] == 1 + 2 + 3 + 4 == 10. Una solución utilizando equaciones guarded: sumlist xs xs == [] = 0 otherwise = head xs + sumlist (tail xs) solución empleando pattern matching: sumlist [] = 0 sumlist [x:xs] = x + sumlist xs c José Raymundo Marcial Romero. Clase Número 21 p.11/12

Como trabaja el pattern matching sumlist [] = 0 sumlist (x:xs) = x + sumlist xs sumlist [8,9] sumlist (8:9:[]) no empata con sumlist [] empata sumlist (x:xs) x=8 xs=(9:[]) así 8 + sumlist [9] 8 + sumlist (9:[]) no empata con sumlist [] empata con sumlist (x:xs) x =9 xs=[] así 8 + 9 + sumlist [] empata con sumlist [] así 8 + 9 + 0 = 17 c José Raymundo Marcial Romero. Clase Número 21 p.12/12