Вы находитесь на странице: 1из 5

http://es.scribd.

com/doc/27500195/INTRODUCCION-APROLOG#scribd
4.1 Aritmtica en PROLOG En PROLOG
La aritmtica se realiza con ciertos predicados predefinidos que toman como
argumento una expresin aritmtica (trabajando sobre enteros y reales) y la
evala.
Expresiones aritmticas
Una expresin aritmtica es un trmino construido con nmeros, variables y
funtores que representan funciones aritmticas. Slo se permiten ciertos
funtores en estas expresiones. Algunos de ellos son los siguientes:

Una expresin aritmtica slo puede ser evaluada si no contiene


variables libres. En otro caso aparece un error de evaluacin
Predicados aritmticos evaluables
Las expresiones aritmticas slo son evaluadas cuando se pasan como
argumentos a predicados aritmticos evaluables:
X is E Evala E y unifica el resultado con X.

Notas: 1. "X is X+1" da FRACASO si X est instanciada en la llamada y


ERROR aritmtico si X est libre. 2. El orden de los literales es relevante en
el uso de predicados evaluables. En el cuarto ejemplo se tiene ERROR
porque X est libre.
Comparacin aritmtica
Los siguientes predicados evalan sus dos argumentos como expresiones
aritmticas y comparan los resultados.
E1 op E2 Se evalan las expresiones E1 y E2 y se comparan segn los
operadores siguientes:

Operaciones aritmticas
La programacin lgica no tiene como objeto abordar problemas de
clculo numrico, pero a veces son necesarias ciertas operaciones
elementales, como contar el nmero de elementos de una lista,
multiplicar por una constante, etc.
En principio, las operaciones aritmticas pueden expresarse
mediante relaciones. As, se puede definir la relacin suma , que
tiene tres argumentos numricos, y que ser verdadera si el tercero es
la suma de los dos primeros, de manera que suma(2,3,5) es
verdadero y suma(2,3,4) es falso. Su definicin extensional sera:
suma(0,0,0).
suma(0,1,1).
suma(0,2,2).
...
Es fcil comprender que esta manera de proceder carece de
utilidad prctica, como en el caso de las relaciones de orden entre
nmeros.
Operadores

Para hacer viables las operaciones aritmticas, Prolog incorpora (o


sea, el procesador reconoce) operadores aritmticos que, para mejor
legibilidad, se escriben con notacin infija: + , - , * y / .
Un trmino en Prolog es, por ejemplo, 6+7 (equivalente
a +(6,7)). Pero, como decamos al hablar de las funciones, Prolog
interpreta 6+7 simplemente como una estructura, diferente de

13 . Por tanto la consulta ?- 13=6+7. obtiene como resultado


NO , y ?- X=6+7. da X=6+7 .
Para desencadenar la evaluacin aritmtica el lenguaje incorpora
un predicado especial infijo: is .

Evaluacin de expresiones aritmticas

El predicado is , escrito con una variable o una constante a su


izquierda y una expresin aritmtica a su derecha, es verdadero si el
resultado de evaluar la expresin es igual a la constante, o es
verdadero para el valor de la variable igual a ese resultado. Por
ejemplo:
?- 13 is 6+7.
YES
?- 13 is 6*7.
NO
?- X is 6*7.
X=42
En la expresin aritmtica pueden figurar variables siempre que
estas variables tengan un valor determinado al evaluar la expresin.
Por ejemplo, con la regla:
media(X,Y,M) :- M is (X+Y)/2.
podemos hacer consultas como:

?- media(10,16,X).
X=13
pero la mquina Prolog (el procesador ejecutndose en un
ordenador) dar un error si preguntamos:
?- media(X,16,13).

Un ejemplo tpico del uso de is es la definicin recursiva del


factorial de un nmero natural:
fact(0,1).
fact(N,F) :- N>0,
Nmenos1 is N-1,
fact(Nmenos1,F1),
F is N*F1.
?- fact(5,X).
X=120
?- fact(-1,X).
NO
?- fact(X,120).
(mensaje de error)
Un par de clusulas muy tiles son las que permiten obtener la
longitud (nmero de elementos) de una lista:
longitud([],0).
longitud([C|L],Long):-longitud(L,L1),Long is L1+1.
?- longitud([a,b,c,d],X).

X=4
Aadiendo esta definicin de longitud, por ejemplo, a las escritas
ms arriba para la generacin de listas que representan algunas
frases en espaol, podemos preguntar por frases con un determinado
nmero de palabras:
?- sentencia(X),longitud(X,4).
X=[Espana,es,un,estado]
X=[un,estado,es,Espana]
?- sentencia(X),longitud(X,L),L<3
NO