Cuando tengo que hacer una operación aritmética, p.ej..
ingresoTotal(Pers,IT):- ingresoPorSueldo(Pers,IS), ingresoPorRenta(Pers,IR), IT is IS+IR.
en este caso, la cuenta es una suma, debo usar is.
Si lo de la izquierda es un valor, o una variable ligada con un valor, entonces el is se verifica si el resultado de la cuenta es el valor. P.ej. si quiero saber si juan tiene exactamente el doble de ingreso que roque, puedo hacer esta consulta
?- ingresoTotal(juan,IngrJuan), ingresoTotal(roque,IngrRoque), IngrJuan is IngrRoque * 2.
No está bien usar el is cuando lo de la derecha no es una cuenta. Más detalles a continuación.
Si en un programa quiero representar “bart es hijo de homero”, ¿pongo?
hijo(X,Y):- X=bart,Y=homero.
o pongo
hijo(bart,homero).
Está claro que pongo lo segundo. ¿Por qué? Porque no quiero decir “X e Y son hijo y padre si a X le pasa tal cosa y a Y le pasa tal otra”, sino que ya sé quiénes son los que quiero relacionar, bart y homero.
En todos (todos) los casos en los que ya sé el valor, lo correcto es poner el valor, no hace falta “pasar” por una variable (como sería la variable X para bart en el ejemplo de arriba). Algunos ejemplos menos obvios.
lavalle851
). Tengo estas reglasEn la primera regla sólo me dan condiciones sobre persona y depto:
gusta(Pers,Depto):- vive(Pers,belgrano), esLujoso(Depto).
En la segunda, no me están hablando de una persona cualquiera, me están hablando de Roque. Entonces el primer argumento no necesita ser una variable
gusta(roque,Depto):- esChiquito(Depto).
Para la tercera, del que me están hablando específicamente es del depto, de la persona me dan condiciones. Entonces
gusta(Pers,corrientes3804):- vive(Pers,boedo).
Entonces, ¿pongo
esAlternativa(Depto1,Depto2):- precio(Depto1,Pr1), precio(Depto2,Pr2), Dif is Pr2 - Pr1, Dif = 5000.
o
esAlternativa(Depto1,Depto2):- precio(Depto1,Pr1), precio(Depto2,Pr2), Dif is Pr2 - Pr1, Dif is 5000.
? Noooooo, el 5000 ya lo sé, no necesito pasarlo por la variable Dif. O sea
esAlternativa(Depto1,Depto2):- precio(Depto1,Pr1), precio(Depto2,Pr2),
5000
is Pr2 - Pr1.