/*
 **********************************************************************
 *
 *      CLP(R) Version 2.0	(Example Programs Release)
 *	(C) Copyright, March 1986, Monash University
 *
 **********************************************************************
 */

% 
% The rule below describes the relationship between two complex numbers 
% and their product. The goal        ?- go         uses the rule
% first to multiply two complex numbers, and then to divide one by another,
% in two different ways.
%

zmul(c(R1,I1),c(R2,I2),c(R3,I3)) :-
	R3 = R1 * R2 - I1 * I2 ,
	I3 = R1 * I2 + R2 * I1 .

go :- 	zmul(c(1,1),c(2,2),Z),
	zmul(c(1,1),Y,c(0,4)),
	zmul(X,c(2,2),c(0,4)),
	nl,
	write(" X = "),
	write(X),
	nl,
	write(" Y = "),
	write(Y),
	nl,
	write(" Z = "),
	write(Z),
	nl.

% Answer:
%   X = c(1, 1)
%   Y = c(2, 2)
%   Z = c(0, 4)

?- printf("\n>>> Sample goal: go/0\n", []).