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 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
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').