Transcript Semántica denotacional de haskell
Sintaxis
1. Estructuras básica 2. Construcciones de expresiones 3. Instrucciones de control
Estructura Básica
La forma de escribir una función en Haskell se define a continuación: * Definición de signatura: Se especifican los tipos de los datos de entrada y salida que posee la función.
* Implementación del cuerpo de la función: Se especifica la descripción de la función para transformar los datos de entrada en los datos de salida.
En la definición de la signatura se utiliza la siguiente sintaxis: nombre_funcion::tipo_argumento->tipo_resultado En la definición del cuerpo de la función la sintaxis es como sigue: nombre_funcion nombre_argumento=
Ejemplo de Estructura
Fase 1 Fase 2 Fase 3
numero :: Integer –> Integer numero x = x+5
Construcción de expresiones
La ejecución de un programa en Haskell se realiza a través de la evaluación de expresiones (términos sintácticos) que denotan valores (entidades abstractas que entendemos como respuestas). Ejemplos de expresiones son: 'a' 3 + 4 (5 > 0, 9) cuyos valores asociados son la letra a, el número 7 y el par ordenado cuya primera componente es el valor verdadero y al segunda el número 9.
Así como podemos asociar las entidades reales o matemáticas con un conjunto, las expresiones en Haskell tienen asociado un tipo. El símbolo :: sirve para indicar explícitamente el tipo de las expresiones.
'a' :: Char 3 + 4 :: Integer (5 > 0, 9) :: (Bool, Integer) El lenguaje tiene un conjunto de tipos predefinidos, de los cuales ya mencionamos algunos: Tipos simples como Integer, Double, Char, Bool, etc.
Tuplas de cualquier longitud. Por ejemplo, (2 * 5 +1, 4 >0, 22.1) es de tipo (Integer, Bool, Double).
Instrucciones de control
Las instrucciones de control son todas aquellas que alteran la ejecución secuencial de las instrucciones, como por ejemplo: IF En este lenguaje funcional se puede utilizar la sentencia condicional IF del modo siguiente: if
Simulación de
Recurrencia
función Argumento 4 Argumento 3 Recurrencia Argumento 2 Argumento 1
Ejemplo Recurrencia
Ejemplo de recurrencia usando “guardas” dividir x y | (x >= y) = 1 + dividir (x - y) y | otherwise = 0 Usando guardas no es necesario asignar tipos a los datos.