Računanje v prologu
Iz E-študij, proste zakladnice študentskega znanja
Program za računanje delitelja
Klasična verzija
function DELITELJ(A,B : integer) : integer;
begin
while A<>B do
if A > B
then A:=A-B
else B:=B-A
DELITELJ := A
end;
Rekurzivna verzija
begin
if A=B then DELITELJ:=A
else
if A>B
then DELITELJ:=DELITELJ(A-B,B)
else DELITELJ:=DELITELJ(A,B-A)
end
Prolog verzija
Ker v prologu iteracije ni moramo poiskati rekurzivno verzijo. Nimamo funkcij, imamo samo relacije:
delitelj(A,A,A). če sta števili enaki dobimo isto število delitelj(A,B,DELITELJ) :- če imamo števili A in B in iščemo delitelj mora izpolniti 3 pogoje: A > B, A mora biti večji od B A1 is A - B, "is" izračuna vrednost izraza in jo prilagodi A1 delitelj(A1,B,DELITELJ). DELITELJ mora biti največji skupni delitelj od A1 in B delitelj(A,B,DELITELJ) :- DELITELJ je delitelj od A in B delitelj(B,A,DELITELJ). če je DELITELJ delitelj od B in A
Prologovo izvajanje programa:
- vnesemo delitelj(24,30,X)
- preveri prvi pogoj, nista enaka, ne uspe
- preveri drugi pogoj, ne uspe ker A ni > od B
- zamenja pogoja -> delitelj(30,24,X)
- preveri prvi pogoj, nista enaka, ne uspe
- preveri drugi pogoj
- uspe, A je > od B
- A1 = 6
- vstavi v delitelj(6,24,X)
- preverimo prvi pogoj, nista enaka, ne uspe.... (rekurzija se nadaljuje dokler ne najde delitelja)
?- delitelj(24,30,X) X = 6