Zdroj


% Peanova aritmetika:
%	`z` reprezentuje nulu,
%	ostatni cisla jsou naslednikem
%	... `s(cislo)`


% jedna(X)
jedna(s(z)).
%jedna(X) :- X=s(z).

% jecislo(+X)
jecislo(X) :- X=z ; X=s(Y) , jecislo(Y).

% soucet(+X, +Y, -S)
%	S je soucet X a Y
soucet(X, z, X):-jecislo(X).
soucet(X, s(Y), s(Z)):-soucet(X, Y, Z).

% co s odcitanim?



% soucin(+X, +Y, -Soucin)

% Domaci ukol:
% deli(+Delenec, +Delitel, -Podil, -Zbytek)
deli(X, Y, z, X) :- Y\==z, vetsi(Y,X).
deli(X, Y, s(Pm1), Z) :- Y\==z, vetsi(s(X),Y),
	soucet(XmY,Y,X), deli(XmY, Y, Pm1, Z).

% vetsi(X, Y), X>Y
%	X je ostre vetsi nez Y
vetsi(s(_), z).
vetsi(s(X), s(Y)) :- vetsi(X, Y).

Dotazy


?- jecislo(s(s(z))).
true ;
false.

?- jecislo(s(s(X))).
X = z ;
X = s(z) ;
X = s(s(z)) ;
X = s(s(s(z))) ;
X = s(s(s(s(z)))) ;
X = s(s(s(s(s(z))))) ;
X = s(s(s(s(s(s(z)))))) ;
X = s(s(s(s(s(s(s(z))))))) .

?- jecislo(s(s(ig))).
false.


?- soucet(s(juyy), s(s(z)), S).
S = s(s(s(juyy))) ;
false.
% pred pridanim kontroly slo scitat i nektera necisla


?- soucet(X, s(s(z)), s(s(s(s(z))))).
X = s(s(z)) ;
false.

?- soucet(s(s(z)), X, s(s(s(s(z))))).
X = s(s(z)) ;
false.

?- soucet(Y, X, s(s(s(s(z))))).
Y = s(s(s(s(z)))),
X = z ;
Y = s(s(s(z))),
X = s(z) ;
Y = X, X = s(s(z)) ;
Y = s(z),
X = s(s(s(z))) ;
Y = z,
X = s(s(s(s(z)))) ;
false.



?- deli(s(s(z)), s(s(s(z))), P, Z).
P = z,
Z = s(s(z)) ;
false.

?- N3=s(s(s(z))), N7=s(s(s(s(N3)))), deli(N7, N3, P, Z).
N3 = s(s(s(z))),
N7 = s(s(s(s(s(s(s(z))))))),
P = s(s(z)),
Z = s(z) ;
false.

?- deli(s(s(z)), z, P, Z).
false.