Você está na página 1de 8

4.Tipos de datos.

Operadores infijos
Las funciones definidas por el usuario, generalmente son prefijas:
Ejemplo: Celsius (f)

Las funciones predefinidas en el lenguaje suelen ser infijas:


Ejemplo: n + m

En Hope se pueden definir funciones infijas asignndoles una prioridad determinada.

Bases de Lenguajes de Programacin

77

4.Tipos de datos. Operadores infijos


De forma general:
infix operacion: prioridad; ! Valor numrico dec operacion: tipo1 # tipo2 -> tipo3; --- parametro1 operacion parametro2 <= definicin_de_operacion;

Ejemplo: Redefinicin de la potencia. infix : 7; dec : num # num -> num; --- b e <= if e = 0 then 1 else b * b (e-1);
Bases de Lenguajes de Programacin 79

4.Tipos de datos. Operadores infijos


Ejemplo: Funciones booleanas (I):
Funcin AND lgico infix y : 6; dec y : truval # truval -> truval; --- false y _ <= false; --- true y b <= b; Funcin OR lgico infix o : 5; dec o : truval # truval -> truval; --- false o b <= b; --- true o _ <= true;
Bases de Lenguajes de Programacin 80

4.Tipos de datos. Operadores infijos


Ejemplo: Funciones booleanas (II):
La implicacin lgica (-->) se define como: AB !A B
infix --> : 4; dec --> : truval # truval -> truval; --- false --> _ <= true; --- true --> b <= b;

Bases de Lenguajes de Programacin

81

4.Operaciones predefinidas en Hope+


Funciones predefinidas en Hope +:
succ: ord: chr: floor, ceil, trunc, round: float: num -> num char -> num num -> char

real -> num num -> real

Bases de Lenguajes de Programacin

82

4.Operaciones predefinidas en Hope+


Funciones predefinidas en Hope +:
+, -, *, ^: num # num -> num real # real -> real div, mod: num # num -> num divmod: num # num -> num # num /: num # num -> real real # real -> real
Bases de Lenguajes de Programacin 83

4.Operaciones predefinidas en Hope+


Funciones predefinidas en Hope +:
<, =<, >, >= :

num # num -> truval real # real -> truval char # char -> truval list(alpha) # list(alpha) -> truval alpha # alpha -> truval list(alpha) # list(alpha) -> list(alpha)
Bases de Lenguajes de Programacin 84

=, /= : <> :

5. Tipos de datos definidos por el usuario


En Hope, se pueden utilizar tipos de datos definidos por el usuario, como en cualquier lenguaje de programacin. Los nuevos tipos de datos se construirn a partir de los tipos predefinidos (int, truval, char, real). La forma de introducir nuevos tipos es a travs de las intrucciones:
Type: Permite renombrar tipos (no crea nuevos tipos) Data: Se crean nuevos tipos de datos mediante el uso de constructores.
Bases de Lenguajes de Programacin 85

5. Tipos de datos definidos por el usuario


La declaracin type simplemente hace un renombramiento, pero no introduce nuevos tipos de datos. Ejemplo: Transformar las coordenadas de un punto 2D.
dec TransPunto: num # num -> num # num; --- TransPunto (x,y) <= .... ;

Se puede renombrar la tupla: num # num con un solo identificador, por ejemplo: Coordenadas.
Bases de Lenguajes de Programacin 86

5. Tipos de datos definidos por el usuario


En Hope
type Coordenadas == num # num; dec TransPunto: Coordenadas -> Coordenadas; --- TransPunto (coor) <= ......;

Bases de Lenguajes de Programacin

87

5. Tipos de datos definidos por el usuario


La instruccin data permite crear nuevos tipos de datos. Ejemplo:
data PALO == Oros++Copas++Espadas++Bastos; data FIGURA == As++Dos++Tres++Cuatro++Cinco++ Seis++Siete++Sota++Caballo++Rey;

Con estas instrucciones se define en Hope un nuevo tipo de datos que identifica a los palos y figuras de la baraja espaola. Estas definiciones son similares a los tipos enumerados de Pascal.
Bases de Lenguajes de Programacin 88

5. Tipos de datos definidos por el usuario


Tambin, se pueden definir tipos compuestos a travs de tipos ms sencillos:
data CARTA == Carta(FIGURA # PALO);

En este caso se ha hecho uso del constructor Carta para agrupar los valores de una figura con los de un palo. Estas estructuras son semejantes al tipo registro en Pascal. Una vez definidos los tipos, se pueden introducir en la declaracin y en la definicin de funciones Hope.
Bases de Lenguajes de Programacin 89

5. Tipos de datos definidos por el usuario


Ejemplos:
data DIA_SEMANA == Lunes ++ Martes ++ Miercoles ++ Jueves ++ Viernes ++ Sabado ++ Domingo; dec esLaborable : DIA_SEMANA -> truval; --- esLaborable (dia) <= (dia /= Sabado) and (dia /= Domingo); dec NoEsLaborable : DIA_SEMANA -> truval; --- NoEsLaborable (dia) <= (dia = Sabado) or (dia = Domingo);
Bases de Lenguajes de Programacin 90

5. Tipos de datos definidos por el usuario


Ejemplos:
data POLIGONO == Triangulo (real # real) ++ Cuadrado (real) ++ Rectangulo (real # real); dec area: POLIGONO -> real; --- area (Triangulo (b,h)) <= (1/2) * b * h; --- area (Cuadrado (lado)) <= lado * lado; --- area (Rectangulo (b,h)) <= b * h;

Bases de Lenguajes de Programacin

91

5. Tipos de datos definidos por el usuario


Ejemplo: Definicin de intervalos:
data INTERVALO == Ext (real # real) ++ Cen (real # real); ! Extremos ! Centro y radio

dec Convertir: INTERVALO -> INTERVALO; --- Convertir Cen(medio, rad) <= Ext(medio rad, medio + rad); --- Convertir Ext(inf, sup) <= Cen((inf + sup)/2.0, (sup - inf)/2.0);
Bases de Lenguajes de Programacin 92