Qoidalar
Prologdagi qoidalar mantiqiy xulosalar va mantiqiy shartlar ro'yxati bilan xulosa qilish qoidalari shaklida yoziladi. Sof Prologda jumlalar Horn bandlari bilan cheklangan:
Xulosa:
- Vaziyat. va shunday o'qing: "Sarlavha TRUE, agar asosiy qismi TRUE bo'lsa." Qoidaning asosiy qismida qoida maqsadlari deb ataladigan predikatlarga havolalar mavjud. O'rnatilgan predikatlar
, / 2
Qiymat: ikkita argumentli operator. Maqsadlar birikmasini belgilaydi.
; / 2
Operator disjunctionni belgilaydi. Faktlar Prologdagi faktlar aniq ma'noga ega bo'lgan mantiqiy predikatlar bilan tavsiflanadi. Prolog tilidagi bilimlar bazasidagi faktlar aniq ma'lumotni (bilimni) ifodalaydi. Prolog tilidagi umumlashtirilgan ma'lumotlar va bilimlar aniq faktlar va umumlashtirilgan ma'lumotlar bo'yicha xulosa chiqarish qoidalari (ta'riflari) va bunday xulosa qoidalari (ta'riflari) bilan belgilanadi. Bo'sh tanasi bo'lgan gaplar faktlar deyiladi.
Bir faktga misol:
Mushuk (Ivan).
Bu fakt qoidaga teng:
Mushuk (Ivan): - TO'G'RI.
Tanqid
Prolog, birinchi navbatda, uning to'liq bo'lmagan deklarativ xarakteri uchun tanqid qilinadi: har qanday murakkab va amaliy foydali Prolog dasturlarini butunlay deklarativ uslubda yaratish deyarli mumkin emas, dasturchi protsessual usullarga murojaat qilishga majbur bo'ladi, bu esa keskin o'sishiga olib keladi. dasturlarni yaratish va disk raskadrovka qilishning murakkabligi, shuningdek, oraliq natijalarni nazorat qilishning yomonligi [2] Tilning yana bir tez-tez tanqid qilinadigan xususiyati - matn terishning yo'qligi (tilning ob'ektga yo'naltirilgan kengaytmalaridan biri bo'lgan Visual Prolog [3] da kuchli matn terish amalga oshirilgan, ammo bu prologning moslashuvchanligini pasaytiradi). Tilda “chuqurlikdagi” qarorlar daraxtini kesib o'tishning oldindan belgilangan tartibi va bu jarayonga aralashish imkonini beruvchi standartlashtirilgan operatorlar mavjud (masalan, kesish operatori! Yoki filial ->). Ushbu arxitektura dasturlarni avtomatik ravishda parallellashtirishni qiyinlashtiradi, bu esa yechim izlashda bir nechta protsessor yoki tarmoq tugunlaridan foydalanish imkonini beradi.
Misollar
Hello World
?- write('Hello world!'), nl.
Hello world!
true.
Brother[править | править код]
parent("Tom","Jake").
parent("Janna","Jake").
parent("Tom","Tim").
male("Tom").
male("Tim").
male("Jake").
female("Janna").
brother(X,Y):-
parent(Z,X),parent(Z,Y),male(X),male(Y),X\=Y.
Вывод: (Jake, Tim) (Tim, Jake)
Старший[править | править код]
старше("Петр", "Иван").
старше("Василий", "Тимофей").
старше("Тимофей", "Петр").
старше(X, Y) :- старше(X, Z), старше(Z, Y).
? старше("Тимофей", V).
? старше(U, "Петр").
? старше(U, V).
Выводы: 1. Тимофей старше Ивана 2. Василий старше Петра 3. Иван-самый младший; Василий — самый старший; Тимофей старше Петра.
Dostları ilə paylaş: |