Računanje v prologu

Iz E-študij, proste zakladnice študentskega znanja

Skoči na: navigacija, iskanje

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
Osebna orodja
Imenski prostori
Različice
Dejanja
navigacija

Tiskanje/izvoz
orodja