Cómo definir ecuaciones.

            La definición de ecuaciones es una parte básica de la especificación de TADes pues son las encargadas de dar sentido a las funciones. Por ello se recomienda que se preste especial atención a su elaboración.

            La definición de una ecuación se realiza en la zona dedicada a tal efecto que comienza por la palabra reservada “ECUACIONES”. En ella tenemos la posibilidad de hacer una declaración de variables, las cuales pueden ser usadas para establecer las ecuaciones. A continuación se procede a definir tantas ecuaciones como se desee.

            En una ecuación vamos a distinguir dos partes: una parte Izquierda y una parte Derecha. Para definir una ecuación bastará con escribir la parte izquierda, luego “==” y por último la parte Derecha. Veamos por separado ambas partes:

-   Parte Izquierda: Se escribe el nombre de una función seguido de “(“ y a continuación una lista con tantos argumentos como esa función espere, éstos pueden ser variables o funciones a su vez. Se escribe “)”. La función debe ser una de las funciones declaradas a lo largo de la especificación del TAD. Las funciones genéricas pueden ser usadas como argumentos de la función principal de la parte Izquierda.

Los  argumentos que se usan en una función deben coincidir tanto en número como en tipo con los esperados por los parámetros de la función.

Parte Derecha: Existen tres tipos de Partes Derechas posibles en una función: Un Término, una Parte Derecha que emplee el conjunto de operadores “SEA” ..... “EN” o una Parte Derecha en donde se emplee conjunto de operadores “SI” ..... “ENTONCES”........ “SI NO”.

-Para el primero de los casos se escribirá o bien el nombre de una de las variables declaradas hasta el momento en el TAD (cuyo tipo coincida con el tipo de retorno de la función de la parte izquierda de la ecuación), o bien cualquiera de las funciones de que se dispone, tanto las propias del TAD como todas las pertenecientes a los tipos de los dominios. Incluso se pueden usar las funciones genéricas del TAD. (el tipo de retorno de la función usada debe coincidir con el tipo de retorno de la función con la que se ha construido la parte izquierda de la ecuación).

Si se emplea una función, entonces se debe escribir su nombre seguido de “(“ y de una lista de argumentos que coincidan en número y tipo con los declarados para la función que se está usando para construir la parte derecha. Estos argumentos pueden ser a su vez variables o funciones. Tras la lista de argumentos se debe cerrar el paréntesis “)”.

-En el segundo caso se debe escribir la palabra reservada “SEA” y a continuación una lista de asignaciones. Seguidamente debe escribirse la palabra reservada “EN” y de nuevo una parte derecha cuyo tipo de retorno coincida con el tipo de retorno de la función de la parte izquierda.

La lista de asignaciones tiene la siguiente estructura: Se escribe una de las variables presentes en el TAD seguido de “=” y de una función con su respectiva lista de argumentos (de igual manera que lo explicado anteriormente). Con esto estamos diciendo que cada vez que escribamos la variable en realidad nos estamos refiriendo a aquello que le ha sido asignado. Si se quiere hacer una nueva asignación bastará con repetir este proceso. Se pueden declarar tantas asignaciones como se desee.

-En el tercer caso se escribirá la palabra reservada “SI” seguida de una función, que actúa como condición, cuyo tipo de retorno sea Booleano o similar, con su respectiva lista de argumentos (de igual manera que lo explicado anteriormente). A continuación “ENTONCES” y una parte derecha cuyo tipo coincida con el del tipo de retorno de la función que se ha usado para construir la parte izquierda de la ecuación.

Seguidamente se escribe “SI NO” y de nuevo otra parte derecha del mismo tipo.

El comportamiento es el siguiente: se reducirá la condición y en caso de que sea verdadera se tomará la parte derecha que sucede al “ENTONCES”, en otro caso se optará por la parte derecha que sucede al “SI NO”.

Veamos un ejemplo completo:

    n, m, pi : Natural

    suma(cero(),m)==m

    suma(suc(n),m)==suc(suma(n,m))

    producto(cero(),m)==cero()

    producto(suc(n),m)==suma(m,producto(n,m))

    resta(n,cero())== n

    resta(suc(n),suc(m))==resta(n,m)

    miOperacion(n,m) == si menor_igual(n,m) entonces

                                                            si igual(n,m) entonces

                                                                        sea pi=suma(n,m) en producto(pi,m)

                                                            si no suma(n,m)

                                                si no resta(n,m)