Igor Pashev - a legnagyobb közös osztó a prológus

15:55 - A legnagyobb közös osztó Prolog

GCD Prolog

Prolog leírt tények. Prolog programot választ olyan kérdésekre, mint „e az állítás igaz? „Vagy:” mi lenne, ha X igaz ez az állítás? ”. Ezért a program kiszámítja a legnagyobb közös osztó két egész szám kell működnie, valahogy így:
  • Igaz, hogy a GCD (22, 121) = 3?
  • Hogy milyen G igaz kifejezése GCD (22, 121) = G?
A prológ van írva, illetve:
  • gcd2 (22, 121, 3).
  • gcd2 (22, 121, G).

Hagyományosan GCD kérik az euklideszi algoritmus, ami igaz tény: lnko (a, 0) = a. Ez a tény a Prolog van írva, mint: gcd2 (A, 0, A). A kérdés gcd2 (11, 0, G) kerül válaszol G = 11. és a válasz arra a kérdésre, gcd2 (11, 0, 3) negatív.

Az a tény, hogy a GCD (a, b) = G, van írva, mint: gcd2 (A, B, G). Ismételt gcd2 (22, 121, 11) pozitív választ kell adni, hogy a kérdést gcd2 (16, 32, 8) - a negatív és a kérdés gcd2 (22, 121, G) - G = 11.

A lényege az euklideszi algoritmus, hogy lnko (a, b) = G, ha lnko (b, n) = g, ahol n - a fennmaradó részlege egy b. Prolog van írva a következő:

Előbb vagy utóbb, N egyenlő lesz nulla, és ellenőrzése a tény gcd2 (A, B, G). csökken a ellenőrzését az a tény, gcd2 (X, 0, X). vagyis az egyenlőség, az első és a harmadik paraméter.

alapszintű program

Minimum (hibás), a program rögzíti gcd.pl fájlt, és így néz ki:

Ez a program nem fog működni, mert előbb vagy utóbb lesz nullával osztani. Az a tény, hogy a Prolog program megkeresi az összes lehetséges megoldást, nem áll meg az első sorban. A fali ettől, hozzá kell tennünk, mint a minimális, a feltétel B = \ = 0 (B nem nulla)

Még jobb, kérje a pozitív és B:

A teszt a használat GNU Prolog 1.3.1. Fájl kiterjesztések: PL és PRO, például hello.pl. gcd.pro. Az első lehetőség a kiemelt (ha a bővítmény nincs megadva), de ellentétes Perl: ha a könyvtár tartalmaz fájlokat és gcd.pl gcd.pro. akkor betöltődik gcd.pl (egy hiba, ha Pearl :-) Tehát jobb, hogy adja meg a fájl teljes neve, zárt aposztróf jelet (egy pont a neve).

a teljes programot

Leírás GCD a számok listája:

Konvertálása listáját húrok számok listáját (vagy fordítva, ez Prologue):

Ez a következőképpen hangzik: az húrok a közölt számok listáját, ha az első sorban a képviselete az első nap, és a fennmaradó sztringlistát egy ábrázolása a fennmaradó telefonszámok listáját. Ismételt str2int ([ '22', '11'], [22, 11]), egy pozitív választ fog adni arra a kérdésre, str2int ([ '22', '11'], X) válasz X = [22, 11 ]. az a kérdés, str2int ([X, '11'], [22, Y]) válasz X = '22', Y = 11.

A belépési pont a program (a tény, amely ellenőrizni kell azonnal a program elindítása után):