I1M2010-T16: El tipo abstracto de las colas de prioridad en Haskell
Sistemas de Inferencia En haskell no es obligatorio declarar el tipo de las expresiones. Haskell...
-
Upload
rebeca-montemayor -
Category
Documents
-
view
216 -
download
0
Transcript of Sistemas de Inferencia En haskell no es obligatorio declarar el tipo de las expresiones. Haskell...
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.
Ejemplo de inferencia
Nombres de función: Identificadores y operadoresExisten dos formas de nombrar una función:
Identificador ej: sum,product y fact
símbolo de operador ej: * y +
Palabras reservadas
case of where let in if thenelse data typeinfix infixl infixr primitive class instance
Operadores
: ! # $ % & * +. / < = > ? @ \ ^ | -
Operadores Los nombres de operador que comienzan con
(:) son utilizados para funciones constructoras.
:: = .. @ \ | <- -> ~ =>
Operadores de igualdad y ordenPara todos los tipos básicos.> Mayor que< Menor que== Igual a>= Mayor o igual que<= Menor o igual que/= Distinto de
Evaluación de expresiones
• I)La precedencia
"2 * 3 + 4” "(2 * 3) + 4”"2 * (3 + 4)“
Evaluación de expresionesPara 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.
Standar PreludeQue 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
Standar Prelude
Evaluación de expresiones
II) La asociatividad:
"1 - 2 - 3“"(1 - 2) - 3“ = -4"1 - (2 - 3)“ = 2
AsociatividadA 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.
Asociatividad
Standar prelude el (-) se toma como asociativo a la izquierda.
Por lo tanto: "1 - 2 - 3" se tratará como "(1-2)-3".
AsociatividadPor defecto, todo símbolo de operador se toma
como no-asociativo y con precedencia 9.infixl digito ops Para declarar operadores
asociativos a la izquierdainfixr digito ops Para declarar operadores
asociativos a la derechainfix digito ops Para declarar operadores no
asociativos
AsociatividadExisten 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
Instrucciones de control
IF
Ecuaciones con guardas
Mecanismos de repetición:
Haskell no posee un mecanismo de repetición, Haskell se basa en la recursividad.
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 funcionesDichas funciones estan cargadas en el
Standar Prelude.
Funciones básicas de Entrada/salida