1.1.5. Zaprosы k prolog-programme. Zapros – eto posledovatelnost iz odnogo predikata ili mnojestva predikatov, razdelyayemыx zapyatыmi (svyazka and) i zavershayuщayasya tochkoy. S pomoщyu zaprosov mojno ustanovit istinnost sootvetstvuyuщyego vыrajeniya. Predikat zaprosa nazыvayetsya selyu (goal).
Prostыye zaprosы, ne soderjaщiye peremennыx, nazыvayut da-net-voprosami. Oni dopuskayut lish dva vozmojnыx otveta: “Yes” ili “No”. V sluchaye otveta “Yes” govoryat, chto zapros zavershilsya uspexom, sel dostignuta.
Naprimer, yesli Programmu 1 zapustit na resheniye, to ona vыdast soobщyeniye
goal: {sel},
chto oznachayet gotovnost k vvodu zadachi, kotoraya, naprimer, mojet bыt takoy
goal: situ(petersburg, europe).
Otvetom na etot vopros budet:
Yes,
t. ye. istinno (xotya v yavnom vide etogo fakta opisano ne bыlo).
Ispolzovaniye peremennыx v zaprosax pozvolyayet zadavat boleye slojnыye voprosы. Zaprosы s peremennыmi mogut imet boleye odnogo resheniya. Pervыm vsegda vыvoditsya to iz resheniy, kotoroye naydeno pervыm. Soobщyeniye “No” zdes takje govorit ob otsutstvii ocherednogo resheniya.
Yesli vvesti zapros k Programme 1, inache:
goal: situ(X, europe),
V otvet na etot zapros budet polucheno neskolko otvetov:
X = london
X = petersburg
X = kiev
X = warszawa
V PROLOG-programme mojno ispolzovat i kolichestvennыye svedeniya. Eto mojno sdelat tak:
Programma 5
DOMAINS
nazvanie,stolica = symbol
naselenie = integer
territoria = real
PREDICATES
strana(nazvanie,naselenie_mln,territoria,stolica)
CLAUSES
strana(kitai,1200,9597000,pekin).
strana(belgia,10,30000,brussel) .
strana(peru,20,1285000,lima) .
Yesli dlya etoy programmы postavit zadachu sleduyuщim obrazom
goal: strana(X, _,Y, _), territoria > 1000000
To sistema vыdast znacheniya, udovletvoryayuщiye zadannыm ogranicheniyam
X = kitai, Y = 9597000
X = peru, Y = 1285000
V etom zaprose znachki _ primenyayutsya dlya oboznacheniya anonimnыx peremennыx, znacheniya kotorыx bezrazlichnы dlya polucheniya resheniya.
Takim obrazom, ispolzovaniye anonimnыx peremennыx ne tolko uproщayet prosess poiska resheniya, no i sokraщayet obyem informasii, poluchayemoy polzovatelem.
V programme na PROLOGe sel mojet ukazыvatsya v yavnom vide v razdele goal. Naprimer:
Programma 6
PREDICATES
hello
GOAL
hello.
CLAUSES
hello:-write(“hello”).
Argumentom vstroyennogo predikata write mojet yavlyatsya lyuboy dopustimыy term PROLOGA. V sluchaye, kogda argumentom yavlyayetsya peremennaya, budet napechatano yeye znacheniye. Ispolzovaniye etogo predikata pozvolyayet poluchat v zaprose boleye podrobnuyu informasiyu o reshenii.
Takim obrazom, zaprosы k PROLOG–programme mogut proisxodit dvumya sposobami – avtomaticheski, pri ukazanii seli v razdele goal programmы, libo pri realizasii dialoga s polzovatelem.
V prosesse dialoga chasto bыvayet neobxodimo ispolzovat vvod informasii s klaviaturы. Dlya etogo imeyetsya nabor vstroyennыx predikatov vvoda:
readln(X) /* vvod stroki */
readchar(X) /* vvod simvola */
readint(X) /* vvod selogo chisla */
readreal(X) /* vvod deystvitelnogo chisla */
Yazыk Turbo Prolog imeyet takje bogatыy nabor vstroyennыx predikatov dlya upravleniya tekstom, grafikoy, zvukom, i t. d., no eti vozmojnosti dostatochno tradisionnы. Dlya oznakomleniya s nimi mojno vospolzovatsya HELP-faylom programmы.
Do'stlaringiz bilan baham: |