Igor Pashev este cel mai mare divizor comun al prologului

03:55 - Cel mai mare divizor comun pe Prolog

DUMNEZEU pe Prolog

Pe Prolog sunt descrise faptele. Programul Prolog răspunde la întrebări precum "Este afirmația adevărată? "Sau" pentru ce este adevărat această afirmație? “. Prin urmare, programul de calcul al celui mai mare divizor comun al celor două numere trebuie să funcționeze în felul următor:
  • Este adevărat că GCD (22, 121) = 3?
  • Pentru care G este expresia GCD (22, 121) = G adevărată?
În Prolog se scrie în consecință:
  • gcd2 (22, 121, 3).
  • gcd2 (22, 121, G).

În mod tradițional, GCD este căutat în conformitate cu algoritmul lui Euclid, în care se află adevărul: GCD (a, 0) = a. Acest fapt din Prolog este scris ca gcd2 (A, 0, A). Răspunsul la gcd2 (11, 0, G) este G = 11. iar răspunsul la întrebarea gcd2 (11, 0, 3) va fi negativ.







Faptul că GCD (a, b) = g, este scris ca gcd2 (A, B, G). Răspunsul gcd2 (22, 121, 11) ar trebui să răspundă pozitiv, gcd2 negativ (16, 32, 8) și G = 11 la gcd2 (22, 121, G).

Esența algoritmului lui Euclid este că GCD (a, b) = g, dacă GCD (b, n) = g, unde n este restul de a împărți a cu b. Pe Prolog se scrie astfel:







Mai devreme sau mai târziu N va fi zero și verificați faptul că gcd2 (A, B, G). reduce la verificarea faptului gcd2 (X, 0, X). adică egalitățile primului și celui de-al treilea parametru.

Programul minim

Programul minimal (incorect) este scris în gcd.pl și arată astfel:

Acest program nu va funcționa, deoarece mai devreme sau mai târziu va exista o diviziune la zero. Adevărul este că programul de pe Prolog caută toate soluțiile posibile fără să se oprească la prima linie. Pentru a ne proteja, trebuie să adăugăm cel puțin condiția B = \ = 0 (B nu este zero):

Și este chiar mai bine să cerem pozitiv A și B:

Pentru testare folosim GNU Prolog 1.3.1. Extensii de fișiere: PL și PRO, de exemplu hello.pl. gcd.pro. Prima opțiune este prioritatea (dacă extensia nu este specificată), dar este în conflict cu Pearl: dacă există fișiere gcd.pl și gcd.pro în director. atunci gcd.pl este încărcat (cu o eroare dacă este Pearl :-) De aceea, este mai bine să specificați numele fișierului complet, cuprind în ghilimele simple (datorită punctului din nume).

Un program cu drepturi depline

Descrierea codului GCD pentru lista numerelor:

Convertiți o listă de șiruri de caractere într-o listă de numere (sau invers, acesta este Prolog):

Se citește astfel: o listă de șiruri este o reprezentare a unei liste de numere, în cazul în care prima linie este o reprezentare a primului număr, iar restul listei de șiruri este reprezentarea listei de numere rămase. Un răspuns pozitiv va fi dat la întrebarea str2int (['22', '11'], [22, 11]), răspunsul la întrebarea str2int (['22', '11'], X) ]. la întrebarea str2int ([X, '11'], [22, Y]) va primi răspunsul X = '22', Y = 11.

Punctul de intrare la program (un fapt care trebuie verificat imediat după lansarea programului):







Trimiteți-le prietenilor: