Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Semantica
2
Sistemas de Inferencia
En haskell no es obligatorio declarar el tipo de las expresiones. Haskell declara el tipo de alguna expresión, el sistema chequea que el tipo declarado coincide con el tipo inferido.
3
Ejemplo de inferencia eligeSaludo x = if x then "adios" else "hola”
El sistema infiere automáticamente que el tipo es eligeSaludo::Bool -> String y, si el programador hubiese declarado que tiene un tipo diferente, el sistema daría un error de tipos.
4
Nombres de función: Identificadores y operadores
Existen dos formas de nombrar una función: Identificador ej: sum,product y fact símbolo de operador ej: * y +
5
Palabras reservadas case of where let in if then else data type infix infixl infixr primitive class instance
6
Operadores : ! # $ % & * + . / < = > \ ^ | -
7
Operadores -> ~ => :: = .. @ \ | <-
Los nombres de operador que comienzan con (:) son utilizados para funciones constructoras. :: = .. @ \ | <- -> ~ =>
8
Operadores de igualdad y orden
Para todos los tipos básicos. > Mayor que < Menor que == Igual a >= Mayor o igual que <= Menor o igual que /= Distinto de
9
Evaluación de expresiones
I)La precedencia "2 * 3 + 4” "(2 * 3) + 4” "2 * (3 + 4)“ La precedencia La expresión "2 * 3 + 4" podría interpretarse como "(2 * 3) + 4" o como "2 * (3 + 4)". Para resolver la ambigüedad, cada operador tiene asignado un valor de precedencia (un entero entre 0 y 9). En una situación como la anterior, se comparan los valores de precedencia y se utiliza primero el operador con mayor precedencia (en el standar prelude el (+) y el (*) tienen asignados 6 y 7, respectivamente, por lo cual se realizaría primero la multiplicación).
10
Evaluación de expresiones
Para resolver esta ambigüedad: Cada operador tiene asignado un valor de precedencia (un entero entre 0 y 9). Esta precedencia la dicta el Standar prelude que es cargado al arrancar el sistema.
11
Standar Prelude Que es el Standar prelude:
Es la cadena de precedencia de haskell para saber que operador debe utilizar primero dependiendo de una enumeración que se le asigna a cada operador. Posee una larga colección de funciones: Con dichas funciones se pueden realizar una gran cantidad de operaciones útiles
12
Standar Prelude
13
Evaluación de expresiones
II) La asociatividad: " “ "(1 - 2) - 3“ = -4 "1 - (2 - 3)“ = 2 La asociatividad: La regla anterior resolvía ambigüedades cuando los símbolos de operador tienen distintos valores de precedencia, sin embargo, la expresión " " puede ser tratada como "(1 - 2) - 3" resultando -4 o como "1 - (2 - 3)" resultando 2. Para resolverlo, a cada operador se le puede definir una regla de asociatividad. Por ejemplo, el símbolo (-) se puede decir que es: Asociativo a la izquierda: si la expresión "x-y-z" se toma como "(x-y)-z" Asociativo a la derecha: si la expresión "x-y-z" se toma como "x-(y-z)" No asociativo: Si la expresión "x-y-z" se rechaza como un error sintáctico.
14
Asociatividad A cada operador se le puede definir una regla de asociatividad. Asociativo a la izquierda: si la expresión "x-y-z" se toma como "(x-y)-z“ Asociativo a la derecha: si la expresión "x-y-z" se toma como "x-(y-z)“ No asociativo: Si la expresión "x-y-z" se rechaza como un error sintáctico.
15
Asociatividad Standar prelude el (-) se toma como asociativo a la izquierda. Por lo tanto: " " se tratará como "(1-2)-3".
16
Asociatividad Por defecto, todo símbolo de operador se toma como no-asociativo y con precedencia 9. infixl digito ops Para declarar operadores asociativos a la izquierda infixr digito ops Para declarar operadores asociativos a la derecha infix digito ops Para declarar operadores no asociativos En el standar prelude el (-) se toma como asociativo a la izquierda, por lo que la expresión " " se tratará como "(1-2)-3". Por defecto, todo símbolo de operador se toma como no-asociativo y con precedencia 9. Estos valores pueden ser modificados mediante una declaración con los siguientes formatos: infixl digito ops Para declarar operadores asociativos a la izquierda infixr digito ops Para declarar operadores asociativos a la derecha infix digito ops Para declarar operadores no asociativos ops representa una lista de uno o más símbolos de operador separados por comas y digito es un entero entre 0 y 9 que asigna una precedencia a cada uno de los operadores de la lista. Si el dígito de precedencia se omite se toma 9 por defecto.
17
Asociatividad Existen ciertas restricciones en la utilización de estas declaraciones: Sólo pueden aparecer en ficheros de definición de función que sean cargados en el sistema. Para un operador particular, sólo se permite una declaración
18
Instrucciones de control
IF Ecuaciones con guardas
19
Mecanismos de repetición:
Haskell no posee un mecanismo de repetición, Haskell se basa en la recursividad.
20
Reglas de ejecución La característica principal de la programación funcional es que los cálculos se ven como una función matemática que hacen corresponder entradas y salidas. Trabaja con llamadas a funciones Dichas funciones estan cargadas en el Standar Prelude.
21
Funciones básicas de Entrada/salida
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.