Sistemas de Inferencia En haskell no es obligatorio declarar el tipo de las expresiones. Haskell...

Preview:

Citation preview

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