Mine sisu juurde

Prolog

Allikas: Vikipeedia
Prolog
Paradigma loogiline
Väljalaskeaeg 1972
Looja Alain Colmerauer
Implementatsioonid BProlog, Ciao Prolog, ECLiPSe, GNU Prolog, Logic Programming Associates, Poplog Prolog, P#, Quintus, SICStus, Strawberry, SWI-Prolog, tuProlog, YAP-Prolog
Dialektid ISO Prolog, Edinburgh Prolog
Mõjutanud keeli Visual Prolog, Mercury, Oz, Erlang, Strand, KL0, KL1, Datalog

Prolog on loogika programmeerimiseks mõeldud deklaratiivne programmeerimiskeel, mis põhineb predikaatloogikal.

Üldine loogika

[muuda | muuda lähteteksti]
  1. _(all kriips) väärtus, millest midagi ei sõltu.
  2. .(punkt) lõpetab lause.
  3. ' (apostroof)'ide vahel on Tekst.
  4. ,(koma) on "loogiline ja".
  5. ;(semikoolon) on "loogiline või".
  6. !(hüüumärk) on negatiivne tupik.
  7. Lause ehk propositsioon (en: proposition) esitab fakti.
  8. Fakt võib olla kas tõene(en: true) või väär(en: false).
  9. Subjekt on objekt, Horni lause päis (tähis:p).
  10. Predikaat on subjekti omadus, Horni lause keha (tähis:q).
  11. Muutujad algavad suure tähega.
  12. Failis on deklareeritud staatilised faktid ja reeglid.
  13. Programmi käigus lisatud faktid ja reeglid on dünaamilised.
  14. Dünaamilisi fakte ja reegleid saab kustutada ka programmi käigus.
  15. Kustutades programmi käigus reegli, võivad muutuda kõigi päringute tulemused, mis sellest sõltusid.

Horni reeglid

[muuda | muuda lähteteksti]

Prolog'i programmid kirjeldavad relatsioone, mis on kirjeldatud eelduslausete põhjal. Prolog'is on 3 tüüpi lauseid.

Horni lausete tüübid:

  • faktid
  • reeglid
  • päringud.

Horni lause, millel puudub keha ja omab vaid tõeväärtust – tõene. Kirjeldavad sidet üldisemat subjektilt vähem üldisemale. Ehk, kui on tõsi üldisem on tõsi ka vähem üldisem.

Näiteks:

sajab-> külm and märg.

Sama mis:

sajab:- külm & märg.

Ehk "Kui on külm ja on märg, siis sajab."

Näiteks:

ema('Marju', 'Margus').

Ehk "Marju on Marguse ema"

Horni lause, mis omab keha ja päist. Kirjeldavad sidet subjekti ja predikaadi vahel. Ehk kui päises esitatud tingimused on tõesed, on tõene ka keha.

Näiteks:

ema('Marju').

Sama mis:

ema('Marju') :- true.

Ehk "Marju on ema"

Horni lause, millel on ainult keha. Ehk küsimus(ed), millele otsitakse järeldust. (Loogikas on järeldus=tõestus)

Näiteks:

?- ema('Marju').  
Yes

Ehk "Kas Marju on ema?"

?- ema(X).  
X = Marju

Ehk "Kes on ema(d)?"

Operaatorid ja tõeväärtustablid

[muuda | muuda lähteteksti]

Eitus ehk negatsioon (en: negation)

    p         not p
1)  false      true
2)   true     false
*)
*)

Konjunktsioon ehk "loogiline ja" (en: conjunction)

    p         q         p and q
1)  false     false     false
2)  false      true     false
3)   true     false     false
4)   true      true      true

Disjunktsioon ehk "loogiline või" (en: disjunction)

    p         q         p or q
1)  false     false     false
2)  false      true      true
3)   true     false      true
4)   true      true      true

Implikatsioon ehk "kui ... siis" (en: implication)

   p         q         p -> q   
1) false     false      true
2) false      true      true
3)  true     false     false
4)  true      true      true

NB: Kui mõnes teises programmeerimiskeeles saab eitava argumendi eitamisest argumendi enda, siis ei ole nii loogikas ! Ehk nt:

(kõik) inimesed = (kõik) mitte mitte inimesed = väär

Sõnaliselt öeldud: kõik inimesed on sama, mis ei ole see, kes ei ole nagu ükski inimene – Ei ole tõsi

Liitlausete formaliseerimine

[muuda | muuda lähteteksti]

Marju on Margus'e ema:

?- ema('Marju', 'Margus').

Marju on kellegi ema:

?- ema('Marju', X).

Marju on Margus'e ema ja Maie tütar:

?- ema('Marju', 'Margus'), ema('Maie', 'Marju').