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). |