|
Tutorial básico de programación en Prolog |
Evaluación de expresiones aritméticas
LLega el momento de utilizar Prolog para nuestros complejísimos cálculos aritméticos. ¿ Acaso existe algún programa donde no se sumen dos y dos ?.
En Prolog es fácil construir expresiones aritméticas. Algún avispado se habrá percatado de que las expresiones matemáticas en general son términos, puesto que corresponden a teorías lógicas de primer orden.
El problema es reducir esas expresiones según las leyes matemáticas para obtener lindos numeritos. Eso se hace en Prolog mediante el predicado is/2, cuyo modo de uso es is(-Var,+Expr). Además, el argumento Expr debe ser un término cerrado (es decir, que no contenga variables libres). Por ejemplo, vamos a sumar dos y dos:
Welcome to SWI-Prolog (Version 2.7.14) Copyright (c) 1993-1996 University of Amsterdam. All rights reserved. For help, use ?- help(Topic). or ?- apropos(Word). 1 ?- X is 2 + 2. X = 4 yes 2 ?-
El predicado is/2 no es reversible, por eso debemos estar seguros de que las variables del segundo argumento siempre están instanciadas. El modo de uso que instancia todas las variables solo tiene éxito si el primer argumento es un número y coincide con la evaluación del segundo argumento. Por ejemplo:
2 ?- 5 is 2 + 2. no 3 ?-
Expresiones válidas
Las expresiones que podemos utilizar en el segundo argumento pueden variar de un entorno de desarrollo a otro, pero vamos a citar las más comunes:
| Término | Significado | Ejemplo |
| +/2 | Suma | X is A + B. |
| */2 | Producto | X is 2 * 7. |
| -/2 | Resta | X is 5 - 2. |
| '/'/2 | División | X is 7 / 5. |
| -/1 | Cambio de signo | X is -Z. |
| '//'/2 | División entera | X is 7 // 2. |
| mod/2 | Resto de la división entera | X is 7 mod 2. |
| '^'/2 | Potencia | X is 2^3. |
| abs/1 | Valor absoluto | X is abs(-3). |
| pi/0 | La constante PI | X is 2*pi. |
| sin/1 | seno en radianes | X is sin(0). |
| cos/1 | coseno en radianes | X is cos(pi). |
| tan/1 | tangente en radianes | X is tan(pi/2). |
| asin/1 | arcoseno en radianes | X is asin(7.2). |
| acos/1 | arcocoseno en radianes | X is acos(Z). |
| atan/1 | arcotangente en radianes | X is atan(0). |
| floor/1 | redondeo por defecto | X is floor(3.2). |
| ceil/1 | redondeo por exceso | X is ceil(3.2). |
















































