Prolog

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

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

Horni reeglid
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.

Faktid
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"

Reeglid
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"

Päringud
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
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      trueDisjunktsioon 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
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').

Vaata ka
 Programmeerimiskeel
 Loogika
 Loogika mõisteid
 C++
 Java

Kategooria:ISO
Kategooria:Programmeerimiskeeled