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...
![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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/1.jpg)
![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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/2.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/3.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/4.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/5.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/6.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/7.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/8.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/9.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/10.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/11.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/12.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/13.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/14.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/15.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/16.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/17.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/18.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/19.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/20.jpg)
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.](https://reader031.fdocumento.com/reader031/viewer/2022013004/5665b46a1a28abb57c915e01/html5/thumbnails/21.jpg)
Funciones básicas de Entrada/salida