sistemas de inferencia en haskell no es obligatorio declarar el tipo de las expresiones. haskell...

21

Upload: rebeca-montemayor

Post on 29-Jan-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 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
Page 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

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.

Page 3: 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

Ejemplo de inferencia

Page 4: 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

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 +

Page 5: 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

Palabras reservadas

case of where let in if thenelse data typeinfix infixl infixr primitive class instance

Page 6: 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

Operadores

: ! # $ % & * +. / < = > ? @ \ ^ | -

Page 7: 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

Operadores Los nombres de operador que comienzan con

(:) son utilizados para funciones constructoras.

:: = .. @ \ | <- -> ~ =>

Page 8: 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

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

Page 9: 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

Evaluación de expresiones

• I)La precedencia

"2 * 3 + 4” "(2 * 3) + 4”"2 * (3 + 4)“

Page 10: 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

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.

Page 11: 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

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

Page 12: 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

Standar Prelude

Page 13: 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

Evaluación de expresiones

II) La asociatividad:

"1 - 2 - 3“"(1 - 2) - 3“ = -4"1 - (2 - 3)“ = 2

Page 14: 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

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.

Page 15: 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

Asociatividad

Standar prelude el (-) se toma como asociativo a la izquierda.

Por lo tanto: "1 - 2 - 3" se tratará como "(1-2)-3".

Page 16: 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

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

Page 17: 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

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

Page 18: 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

Instrucciones de control

IF

Ecuaciones con guardas

Page 19: 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

Mecanismos de repetición:

Haskell no posee un mecanismo de repetición, Haskell se basa en la recursividad.

Page 20: 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

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.

Page 21: 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

Funciones básicas de Entrada/salida