% 2*c = (3*a*b - 5*c^2*d) / (2*a*c - 6*x^2*y)
% ocurre( +Incognita, +Expr )
ocurre( X, X ).
ocurre( X, A + B ) :-
  ocurre( X, A );
  ocurre( X, B ).
ocurre( X, A - B ) :-
  ocurre( X, A );
  ocurre( X, B ).
ocurre( X, Expr ) :-
  Expr =.. [ _, A, B ],
  ( ocurre(X, A); ocurre(X, B) ).

% resuelve( +Incognita, +Ecuacion, -Solucion ).
resuelve( X, X = R, X = R ).

resuelve( X, A + B = C, Resp ) :-
  ocurre( X, A ),
  resuelve( X, A = C - B, Resp ).
resuelve( X, A + B = C, Resp ) :-
  ocurre( X, B ),
  resuelve( X, B = C - A, Resp ).
  
resuelve( X, A * B = C, Resp ) :-
  ocurre( X, A ),
  resuelve( X, A = C / B, Resp ).
resuelve( X, A * B = C, Resp ) :-
  ocurre( X, B ),
  resuelve( X, B = C / A, Resp ).

:- op( 150, yfx, [ => ]).
% xfx, xfy, yfx, fx, fy, xf, yf

% 1. A ana le gustan todos los juguetes que le gustan a susana.
% 2. A susana le gustan todos los juguetes con los
%    que juega
% 3. Susana juega con snoopy.
% 4. Susana juega con sally.
% 5. snoopy es un juguete.
:- op( 500, xfy, [juegacon, esun, gusta] ).
:- op( 510, xfy, y ).
:- op( 520, xfy, si ).

:- dynamic gusta/2, y/2, esun/2, gusta/2.
:- dynamic si/2, juegacon/2.

ana gusta X si susana gusta X.
susana gusta X si X esun juguete y susana juegacon X.
susana juegacon snoopy.
susana juegacon sally.
snoopy esun juguete.

% pregunta( +Consulta ).
pregunta( X ) :- X.
pregunta( X y Y ) :-
  pregunta(X), pregunta(Y).
pregunta( X ) :-
  X si Y,
  pregunta( Y ).










    Source: geocities.com/mx/mticucea

               ( geocities.com/mx)