Основы искусственного интеллекта: учебное пособие


Download 428.17 Kb.
bet40/54
Sana11.02.2023
Hajmi428.17 Kb.
#1189651
1   ...   36   37   38   39   40   41   42   43   ...   54
Bog'liq
Основы искусственного интеллекта учебное пособие

Ro'yxatlarni saralash - kerakli elementlarga kirishni osonlashtirish uchun ro'yxat elementlarini ma'lum bir tarzda qayta tartibga solish . Ro'yxatlarni saralashning ­ko'plab usullari mavjud ­, ammo ulardan uchtasi odatda qo'llaniladi: almashtirish usuli, kiritish usuli va tanlash usuli (yoki ularning kombinatsiyasi). Ushbu usullardan birinchisi ro'yxat elementlarini kerakli tartibda ketmaguncha juft-juft qilib qayta tartiblashdir. Ikkinchisi ­ro'yxat tartiblashtirilgunga qadar kerakli joylarda ro'yxatga elementlarni kiritish orqali amalga oshiriladi. Uchinchi usul ­ro'yxat elementlarini qayta-qayta olish va ko'chirishni o'z ichiga oladi. Ushbu usullarning ikkinchisi (qo'shish usuli) Prolog tilida amalga oshirish uchun ayniqsa qulaydir.
Elementlari ­tasodifiy joylashtirilgan ro'yxatni [4,7,3,9] ko'rib chiqing. Aytaylik, biz undan [3,4,7,9] ro'yxatni olmoqchimiz ­, o'sish tartibida tartiblangan. Keling ­, qo'shish usuli bo'yicha ro'yxatni kerakli tartiblashni amalga oshiradigan predikatni tasvirlaylik.
Prolog tilining kuchli xususiyatidan, ­ichki unifikatsiyadan foydalanish uchun keling , quyruq sortini qilaylik ­. Ushbu tartiblash usulini amalga oshiradigan qoidalar ­quyidagi tuzilishga ega:
1P5eGr_50Gr([],[]).
l_nzegP_zogP([X|Ta11], ZogRe(1_11z5)
1p5egP_zogP(Ta11, ZogRei_Ta11),
1 pzegR (X, ZogRei TAI, ZogRei Pz5).
l_nxv(X, [Y|SorVe(1_11sU], [Y|SorVe(1_11sV1]) asc_orger(X, Y), !,
1P5erY(X, ZorVey_115Y, ZorVey_115Y1).
1P5erY(X, ZorVey_115Y, [X|ZorVey_115Y]).
azz_orger(X, Y) :- X>Y.
Keling, ushbu qoidalarning ishlashini misol sifatida [4,7,3,9] ro'yxatidan foydalanib muhokama qilaylik . Prolog birinchi navbatda yuqoridagi qoidalarni ­asl ro'yxatga qo'llaydi; chiqish ro'yxati hozircha aniqlanmagan:
l_pzegU_zogU([4,7,3,9],_).
l_n_n_n_t_srY qoidasini qondirishga birinchi urinish l_n_n_n_t_srY ([], []) qoidasining birinchi varianti bilan amalga oshiriladi , ya'ni bu qoidani qondirish uchun ikkala ro'yxat ham bo'sh bo'lishi kerak.
Linux qoidasining ikkinchi varianti roʻyxatni roʻyxat boshi va uning dumining birikmasi sifatida koʻradi . Prologning ichki birlashtirish protseduralari ­asl ro'yxatni bo'sh qilishga harakat qiladi. Ro'yxat elementlarini yo'q qilish ro'yxat ­boshidan boshlanadi va rekursiv davom etadi ­. Prothod birinchi qoidalarni qondirishga harakat qilganda, l_nzegv_zorv ga rekursiv qo'ng'iroqlar amalga oshiriladi, asl ro'yxatning har bir elementi ketma -ket ­X qiymatiga aylanadi va keyinchalik ular stekga suriladi. Ushbu tartibni qo'llash natijasida ro'yxat bo'sh bo'ladi. Endi l_nzegv_sorv qoidasining birinchi varianti chiqish ­ro'yxatini nolga o'rnatadi. Keyinchalik, Prood l_nzegU_zorY , ­qoida 1 inzv tanasidagi ikkinchi qoidani qondirishga harakat qiladi . X o'zgaruvchisi dastlab stekdan chiqarilgan birinchi ­qiymatga o'rnatiladi 9 va n_instY qoidasi instv (9,[],[9]) shaklini oladi . Keyin navbatdagi element 3 stekdan chiqariladi va n_n_rY ning birinchi versiyasi sinovdan o'tkaziladi va shuning uchun buyurtma qoidasi asc_orger(X, Y) :- X>Y . Bu erda X o'zgaruvchisi 3 qiymatiga ega, Y esa 9 qiymatiga ega. ­Bu qoida bajarilmagani uchun ­Linuxning birinchi varianti u bilan birga ishlamay qoladi . Keyin, ikkinchi variantdan foydalanib , l_n_nrVy 3 chiqish ro'yxatiga 9 ning chap tomoniga kiritiladi: l_nnrV(3,[9],[3,9]) .
Keyinchalik l_pzegr_zogr ga qaytish mavjud; endi u l_nzegr_zogr([3,9],[3,9]) shakliga ega. Rekursiyaning keyingi bosqichida stekdan keyingi element, ya'ni 7 kiritiladi. Ushbu tur bo'yicha ish boshida n_nsigr qoidasi n_nsigr(7,[3,9],_) va ­7 ko'rinishga ega va 3 taqqoslanadi: acc_orger(7,3 ):- 7>3.
Ushbu qoida muvaffaqiyatli bo'lganligi sababli, 3-element stekga suriladi va rnserb yana rekursiv chaqiriladi, lekin ro'yxatning dumi bilan: n_nzegr(7,[9],_).
Asc_orger(7,9) qoidasidan beri :- 7>9 muvaffaqiyatsiz, keyin l_nzegr ikkinchi varianti sinovdan o'tkaziladi (muvaffaqiyatli) va rekursiyaning oldingi doiralariga qaytish sodir bo'ladi, birinchi navbatda l_nzegr, ­keyin esa l_nzegr_zogr. Natijada 7 chiqish ro'yxatida ­3 va 9 elementlar orasiga joylashtiriladi: n_nzegr(7, [3,9], [3,7,9]).
bir raundini qaytarish stekdan 4-elementni chiqaradi ­. Keyin ­acc_orger qoidasini olamiz (4,3) :- 4>3. Bu muvaffaqiyatli, shuning uchun bizda n_nzegr(4, [7,9],_) mavjud. asc_orger qoidasi (4.7) :- 4>7 bajarilmadi. Bu shuni anglatadiki, 4 chiqish ro'yxatida 3 dan 7 gacha bo'ladi:
inseg^(4, [3,7,9], [3,4,7,9]) .
l_pzegr_zogr([4,7,3,9], [3,4,7,9]) .
Endi stekda boshqa elementlar yo'q va barcha l_nzegr_zogr rekursiyalari allaqachon yopilgan.
Ma'lumotlarni ro'yxatga joylashtirish. Ba'zan, ­ma'lum vazifalarni dasturlashda, keyinchalik qayta ishlash uchun ma'lumotlar bazasidan ma'lumotlarni ro'yxatga olish kerak bo'ladi ­. Prolod ushbu vazifani bajarish uchun o'rnatilgan predikatni o'z ichiga oladi:
Pnya11(Varlabel_pasche, Pre(IsaRe_expressz1on, ^^3P_pathe).
varlay_pasche bu yerda ­Predicate_expresson kirish predikati ob'ektini bildiradi va ^^3P_pathe - ­chiqish ro'yxatining o'zgaruvchan nomi. Ushbu o'zgaruvchi ­bo'limda e'lon qilingan ro'yxat domeniga murojaat qilishi kerak
yosha1pz.
Misol. Keling ­, futbol jamoalari to'plagan ochkolar haqidagi ma'lumotni o'z ichiga olgan predikatni tasvirlaylik. Siz barcha ballarni qo'shishingiz va ularning o'rtachasini olishingiz kerak .­
/* O'rtacha qiymatni hisoblash uchun ma'lumotlarni ro'yxatga kiritish predikatini ko'rsatish * /
^sg. \u003d gea1 * prge ^ ca-les
PooPla11 (sutbo1, gea1) sit_NzP (NzP, gea1, ^ Redeg). aVe^ade_3co^e e1ases
/* faktlar (futbol ma'lumotlar bazasi) */ GooPla11("0Mo ZPaRe",116.0). GooPla11("1^c^dap",121.0).
GooPla11("]^c^dap ZPaRe",114.0). GooPa11 ("Rip1ie", 99.0). GooPba11('^^A",122.0) .aVe^ade_3co^e
^nyaU (PoxPs, PooAba11 (_, PoxPs), PoxP_NyzP), sit_^sP (Po ^ P_^sP, Sum, NumBe^),
AVe^ade = Zum / Numbe^, mg^e("Oʻrtacha = ",AVe^ade). zit_NzP ([],0,0). sut_^3P ([H|T], Zut, NumBe^) :- sut_^sP(T, Sum1 ^ umBeg1),
Zit \u003d H + Zit1,
Raqam^ = Raqam^1 + 1. doa1
aVe^ade_sco^e.

    1. Proloddagi satrlar

Prologdagi satr, boshqa tillardagi kabi, belgilar to'plamidir. Prologda dasturlashda belgilar ularning ASP kodlari yordamida “yozilishi” mumkin. Tegishli belgi sifatida A8SP o'nlik ­kodidan ­keyin (^) teskari chiziq (\) talqin qilinadi ­. Bitta belgini ifodalash uchun \m apostroflar ichiga qo'yilishi kerak:
Belgilar qatorini ifodalash uchun ularning ASP kodlari ­birin-ketin joylashtiriladi va butun qator qo'sh tirnoq ichiga olinadi: "\M\M\M". Masalan, "ABC" ­yozuvi "\65\66\67" yozuviga teng.

      1. Satrlar ustida amallar

Satrning uzunligi satrdagi belgilarning umumiy soni bilan o'lchanadi. Prolod o'rnatilgan predikatga ega bo'lib ­, u satr uzunligini topish uchun ishlatiladi:
zgU_1ep (3Ug1pd_ua1ie, 3Ug1pd_1epdUU).
Agar ^ o'zgaruvchisi qoidaga ishlov berishdan oldin sgY_len("TOBAU"^) qoidasida aniqlanmagan bo'lsa, u holda ­"TOBAU" qator uzunligi qiymatini oladi. Bu qiymat butun son bo'ladi ­. Agar 3yr_1en predikatiga qo'ng'iroq boshlanishidan oldin uning ikkala o'zgaruvchisi allaqachon belgilangan bo'lsa, predikat ­faqat qiymat bo'lsa, muvaffaqiyatli bo'ladi. 3Ur1pd_ua1ie qatorining uzunligiga teng. Misol uchun, agar 3 ­"ABC" qiymatiga ega bo'lsa va ^ 3 qiymatiga ega bo'lsa, u holda syr_1en(3^) predikati muvaffaqiyatli bo'ladi; aks holda muvaffaqiyatsiz bo'ladi.
Ikki qatorning birlashishi ularning birlashishini, ya'ni bitta yangi qatorning shakllanishini anglatadi. Masalan, ­“op yaw” va “ayy a y1she” ikki qatorni birlashtirish natijasi “op yaw ay a y1che” yoki “ay ay yile ope yaw” bo‘lishi mumkin. Olingan ikkita satr farq qiladi, chunki ularni tashkil etuvchi qatorlar boshqa tartibda birlashtirilgan ­. Prolod ikkita satrni birlashtirishni (birlashtirishni) bajaradigan va sintaksisga ega bo'lgan o'rnatilgan predikatga ega:
sopsaU(1at U_zUg1pd1,1 da U_zUg1pd2, OiUriU_3Ug1pd).
Shu bilan birga, u kamida ikkita kirish ­ob'ektini o'z ichiga olishi kerak. Xuddi shu predikat, agar chiqish satri berilgan bo'lsa, birlashtirishda ishtirok etuvchi manba satrlaridan birini aniqlashga imkon beradi ­yoki agar barcha ob'ektlar berilgan bo'lsa, operatsiyaning haqiqatini tekshiradi.
Misol:
concaY("TOBAUTO","TOMOCCO'C",3) ^ 3 = "TOBAUTOMOCCO'C" concaU(3,"TOMOCCO'C","TOBAUTOMOCCO'C") ^ 3="TOBAU" concaU("TOBAU", 3,"TOBAUTOMOKKO'K") ^ 3="TOMOKKO'K" konkay ("TOBAU", "TOMOKKO'K", "TOBAUTOMOKKO'K") ^ haqiqiy konkaU("TOBAU","TOMOKKO'K","TOBAUTOMOK ") ^ noto'g'ri
Pastki qatorlarni yarating. Pastki satr - bu asl satrning bir qismining nusxasi bo'lgan satr. Masalan, "Expery 3usUets" qatorining ikkita mumkin bo'lgan pastki qatorlari ­" Expery" va "3sUets" dir . Prolod pastki satrlarni ­yaratish uchun o'rnatilgan predikatga ega, ularning sintaksisi ­:
urnzg u t t e r, 3 o urse_ zUg1pd, 3ubzUg1pd1, 3ubzUg1pd2).
Numble^ argumenti asl 3ourse_3Urlnd qatoridan 3uB3Ur1nd1 ga ­ko'chiriladigan belgilarning umumiy sonini belgilaydi ­. Satrdagi qolgan belgilar
3ouble_zUr1pd 3ubzUr1pd2 ga ko'chiriladi .
Misol. Bayonot:
UgopUzUg(6, "ExregY suzUetz", 3Ug1pd1, 3Ug1pd2)
3Vr1pd1 ga "ExperY" qiymatini va 3Vr1pd2 ga "suzUets" qiymatini ­beradi .
Belgilar prefikslarini yarating. "Prefiks" belgisini yaratish bu belgini satr boshiga qo'shishni anglatadi. Masalan, "BSBE" qatoriga "A" prefiksini qo'shish natijasida "ABSBE " qatori paydo bo'ladi . Prothod ­-dagi ushbu operatsiya o'rnatilgan predikat yordamida amalga oshiriladi:
UropUsVag(3Ug1pd, SUag, KezU_oU_zUg1pd).
3Ug1pd ob'ektiga SGar va KezU_oU_zUg1pd ("qatorning qolgan qismi") dan iborat qiymat beriladi .
Belgilangan predikat ­satrdan bitta belgini (birinchisini) chiqarish uchun ham ishlatilishi mumkin.
Misol:
PropPcAar(Zer, 'P', "OX") ^ Zer="P0X"
ProposAagS'ZRKtaS", C, "RESHS") ^ C='3'
PropPsAag("xVAZE", 'd', X) ^ X="VAZE"
Maxsus chiziqlar. Prolog ma'lum maqsadlar uchun ishlatiladigan maxsus satrlarni belgilaydi. Bu satrlar nomlar deb ataladi va ramziy konstantalar, domenlar, predikatlar va o'zgaruvchilarni ifodalash uchun ishlatiladi . ­Ta'rifga ko'ra, Proloddagi maxsus satrlar quyidagi ­xususiyatlarga ega:

  • satr katta va kichik harflar, raqamlar va pastki chiziqdan qurilgan;

  • belgilar orasida bo'sh joy bo'lmasligi kerak;

  • satr harf bilan boshlanadi;

  • satr biron bir maxsus belgilar bilan boshlana olmaydi;

  • satr nazorat belgilarini o'z ichiga olmaydi.

, u satr maxsus Prothod qatori ekanligini tekshirish imkonini beradi . Ushbu predikatning ­sintaksisi ­quyidagicha:
1zpate (30g1pd).
Agar Seg1pd Pro1od maxsus satri bo'lsa, unda predikat muvaffaqiyatli bo'ladi; aks holda u muvaffaqiyatsiz bo'ladi.
Ma'lumotlarni konvertatsiya qilish. Ma'lumotlarni ­bir turdan ikkinchisiga o'tkazish uchun proksi-server quyidagi ­predikatlarni beradi:
irreg_1oyer (^ ^)
sEr_sAar (S, S) s0r_1pr (S, I) sEr_gea1 (S, K) sAar_1nP (C,1).
predikat ob'ekt turi foydalanuvchi tomonidan belgilangan predikat ob'ekt turidan farq qilganda ulardan foydalanish foydali bo'ladi .­
Barcha ma'lumotlarni o'zgartirish predikatlari ikkita ob'ektni o'z ichiga oladi ­va bu predikatlarning nomlari amalga oshiriladigan transformatsiya turini ko'rsatadi. Masalan, s!r_cbar s!rlnd tipidagi bir belgili qatorni ebar tipidagi qiymatga o‘zgartiradi . Predikat nomlari, shuningdek, ob'ektlarning tartibini ko'rsatadi, chunki ular ­ma'lumotlarni o'zgartirishning ikki yo'nalishiga ega. Misol uchun, agar 81 o'zgaruvchisi Irreg_Ind(81,82) predikatida allaqachon aniqlangan bo'lsa va " 8SO8 ARB 8TK1PE8 " qiymatiga ega bo'lsa , u holda bu predikat " strarz anii strg1res " qatorini 82 o'zgaruvchiga belgilaydi . Ammo agar 82 o'rnatilgan bo'lsa va 81 o'rnatilmagan bo'lsa, u holda " 8SO8 AS 8TK1PE8 " qiymati 81 o'zgaruvchisini oladi . Ikkala o'zgaruvchi ham o'rnatilgan bo'lsa, agar o'zgaruvchilardan biri ­boshqa o'zgaruvchidagi satr qiymatiga ega bo'lsa ­, lekin kichik harflar bilan yozilgan bo'lsa, predikat muvaffaqiyatli bo'ladi (ya'ni, ular aslida katta-kichik harflarga mos kelmasligi uchun sinovdan o'tgan).
predikati s!rlng tipidagi ob'ektlarni caar tipidagi ob'ektlarga aylantirish uchun ishlatiladi . z!r_lpr predikati butun sonlarning satr ko'rinishini 1 turdagi o'zgaruvchilarga aylantirish uchun ishlatiladi . Haqiqiy sonlarni satrlarga aylantirish uchun s!r_rea1 predikati ishlatiladi . ­Predikat sAag_ 1 p ! berilgan ob'ektga raqam (ASP belgilar kodi ­) belgilash uchun ishlatiladi.

    1. Prolod tilida fayllar

Fayllardagi ma'lumotlar bilan ishlash fayllarni qayta ishlash deb ataladi . Eng keng tarqalgan ­fayl operatsiyalari faylni yaratish, faylga yozish va undan o'qish, mavjud faylni o'zgartirish va unga yangi ma'lumotlarni qo'shishni o'z ichiga oladi.

      1. Predikatlar Fayllar bilan ishlash uchun predikatlar

Fayllar bilan ishlash uchun ba'zi Predikatlar Proto ­:

  • ye1e8eP1e ( ELEPate) - faylni yo'q qilish;


  • Download 428.17 Kb.

    Do'stlaringiz bilan baham:
1   ...   36   37   38   39   40   41   42   43   ...   54




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling