Tajriba ishi 7. Prolog deklarativ dasturlash tili.
Prolog tili gramatikasi
Prolog tilida lingvistik ifodaning manosi ifodalanadi, ya’ni fakt (klauz)lar formal tilda yoziladi. Prolog mantiqiy dasturlash tili – ifoda ma’nosini faktlar orqali yozish formal tili hisoblanadi. Bu til vositasida tabiiy tillarni qayta ishlash tizimlarning asosiy komponentlari amalga oshirilishi mumkin. Prolog tili asosida mantiqiy va lingvistik dasturlash asosiy komponentlarni tushunish va ular bilan ishlash ko’pgina adabiyotlarda keltirilgan[].
Simvolli mantiq yaratishning bosh maqsadlaridan biri mantiqiy kelib chiqarish tushunchasiga formal, mexanik mano berishidir. Agar biror bir masalallar sinfiga tegishli shartlar mos mantiqda oldshartlar to’plami sifatida formal tasvirlansa va agar yechilishi talab qilinadigan masala ham ushbu mantiqda formal gap sifatida tasfirlansa, u holda bu masalaning yechimini old shartlardan kelib chiquvchi formal isbot sifatida qurish mumkin.
Misol uchun lingvistika sohasida oldshartlar til ifodalari sinfining grammatika qoidalari shartlarini bajarilishini ko’rsatib, masalaning yechimi
”Shunday A mavjudki qaysiki A – bu u garamatik ifodaning
tahlili(interpretatsiyasi)” umumiy gap ko’rinishida bo’ladi. Bu gapning konstruktiv isboti nafaqat A tahlil(interpretatsiya)ning mavjudligini ko’rsatadi, balki A ning joriy qiymatini ham topadi.
Konstruktiv isbot protsedurasi nafaqat isbotni quradi, balki gapdagi noma’lumlarning qiymatlarini aniqlaydi. Shunday qilib konstruktiv isbotni shu noma’lumlarning qiymatlarini aniqlovchi hisoblash qurilmasi sifatida ham qarash mumkin. Shu nuqtai nazardan oldshartlarni dastur sifatida, masala ko’rsatilgan gapni - ushbu dasturni ma’lum kiritish parametrlari va noma’lumni qiymatlarini chaqiruvchi chaqirish sifatida va isbotni esa dasturning bajarilishi sifatida qarash mumkin. Bu mantiqiy dasturlashning asosiy alifbosidir.
Mantiqiy dasturlash tizimini yasash uchun qoidalarning ishonchli, to’la to’plami va sistematik qo’llaniladigan proseduralargina yetarli emas. Hisoblash qurilmasi yetarli bo’lishi uchun isbot prosedurasi tomonidan hali tekshirilmagan isbot imkonlari(yo’llari)ning birortasi ham tashlab ketilishi mumkin emas.
Ya’ni prosedura isbotsiz o’z ishini faqatgina isbotning o’zi mavjud bo’lmasagina tugatishi mumkin. Agar javob mavjud bo’lsa biz dasturning albatta javob bilan yakunlanishini kutamiz (mashina xatolari, xotirani to’lishi va shunga o’xshash holatlar hisobga olmaganda). Old shartlardan kerakli natijadan tashqari, bu natijaga mos kelmaydigan (bu natijadan farqli bo’lgan) bir necha natijalar kelib chiqishi mumkin. Isbot protsedurasi maqsadga yo’naltirilgan holda faoliyat ko’rsatishi va barcha mos kelmaydigan natijalarni, umuman daxli bo’lmagan hisoblashlarni bajarilisihi kutmaymiz.
Aslida to’liqlik va maqsadga yo’naltirilganlikni to’la qo’lga kiritish mushkul, ammo bu qiyinchilikni mantiqiy dasturlash osonlashtiradi. Bu holda muommo mantiqiy dasturlashning ifodalanuvchanligi va ishonchli, effektiv hisoblash orasida kompramis(kelishuv) asosida hal etiladi. Mantiqiy dasturlash ana shu kompromisni ochish ifodalash va prolog tilida amalga oshirilishiga qaratilgan.
Eng avvalo prolog deklarativ til, yani prolog dastur aniq hisoblash usuli bilan bog’liq bo’lmasdan, static hisoblanadi. Paskal dasturida hisoblashni qanday amalga oshirilishini ko’rsatiladi. Darhaqiqat prolog protsedurali interpetatsiyaga ham ega. Prolog pragrammada e’lon qilingan munosabatlarni hisoblashning maxsus metodlari ishlatiladi. Shunday qilib, prolog tili deklarativ dasturlashni kuchli rivojlantirgan ilk qadam - mantiqiy dasturlash tilidir.
Ikkinchidan prolog dasturi munosabatlar tuzilmasidan iborat bo’lsa, traditsion tillardagi dastur funksiyalar tuzilmasidan iborat. Biron bir qiymat qaytaruvchi funksiyani chaqirish va shunga o’xshagan tushinchalar prolog uchun begona. Buning o’rniga prolog borliqlar orasidagi munosabatlarni ifodalaydi. Funksiani chaqirish tushinchasi prolog tilida borliqlar orasida ma’lum shartlarni bajaruvchi ma’lum munosabatlar mavjud yoki yo’qligi haqidagi so’roviga o’tkaziladi. Bu farq bazi bir xususiyatlarga ega. Masalan prologda o’zgaruvchi tushinchasi traditsion tillardagi o’zgaruvchi tushinchasidan tomoman farq qiladi.
Prolog tilining strukturali tuzilmasidan uning nodeterminal ekanligi, yani ma’lum bir elementlar berilgan elemenlar bilan ma’lum bir munosabatlarga bo’lishi kelib chiqadi. Traditsion tillarda funksional yondoshuv mavjud, qaysiki bitta element(funksiya qiymati) qolgan elementlar (funksiya argumentlari – aktual parametrlar) orqali bir qiymatli aniqlanadi va funksiyaning qiymatini hisoblash uchun hisoblash funksiya argumentlari ustida determinal tarzda amalga oshirilishni taqozo etiladi. Shu uch xususiyat tufayli prolog tili boshqa traditsion tillardan juda katta farq qiladi. Bundan kelib chiqadiki, prolog tilida fikr yuritish va dasturlash traditsion fikrlash va traditsion dasturlashdan juda katta farq qiladi. Odatda yangi dasturlash tilini o’rganishda oldingi o’rganilgan tillar yordam beradi. Lekin prolog tilini oldin o’rganilgan tillar tajribasini va ko’nikmalarni chetga surib qo’yib o’rganish oson kechadi. Afsuski tilni bunday o’rganish dasturlash borasida ko’p ilyustarativ misollar keltirishni, ularni chuqur tahlil qilishni {qanday ishlaydi, qanday yasaladi} talab qiladi. Shuning uchun maqolada prolog haqida boshlang’ich ma’lumot va qaysi kitoblarga murojaat qilish haqida ma’lumot mavjud.