Основы искусственного интеллекта: учебное пособие
Download 428.17 Kb.
|
Основы искусственного интеллекта учебное пособие
- Bu sahifa navigatsiya:
- Misol: /* Ro‘yxatlar bilan ishlashni ko‘rsatish */ dosha1nz
- bandlar
- Tashqi maqsadlarga misollar
- Misol
Misollar:
Ro'yxatni dasturda ishlatish uchun ro'yxat predikati e'lon qilinishi kerak. Misollar: chuqur ([1,2,3,6,9,3,4]) geo1pit ([3.2,4.6,1.1,2.64,100.2]) k1te(["UEZTEKOAU","TOBAU","TOMOEKO'K"]) Ro'yxatlarning dasturga kiritilishi uning uchta bo'limida aks ettirilishi kerak. Ro'yxatning domeni docstrings bo'limida tasvirlangan bo'lishi kerak , ro'yxat bilan ishlaydigan predikat prue1Sackes bo'limida va nihoyat ro'yxatning o'zi bo'limda aniqlanishi kerak. s1ases yoki doa1. Misol: /* Ro‘yxatlar bilan ishlashni ko‘rsatish */ dosha1nz yyy_izu = yyy_pate * ntbx = sutb01 mnbjer_izk = mnbjer * njbjer = l_pkedeg rre ^1sakes uruz(uru_11zu) ball (miner_isc) bandlar bruyz(["arrgom", "goyp", "tosk1pdyyy", "kkipyeryyy"]). ball([56,87,63,89,91,62,85]). Ro'yxat tavsifining o'ziga xos xususiyati - elementning domen nomidan keyin yulduzcha (*) mavjudligi. Misol uchun, bui_pathe * yozuvi bu elementi bui_pache bo'lgan ro'yxatning domeni ekanligini bildiradi, ya'ni bui_pathe* yozuvi bui_pathe domenining elementlaridan iborat ro'yxat sifatida tushunilishi kerak . Tashqi maqsadlarga misollar: buis (A11). buis([_,_,_,B,_]). buis([B1,B2,_,_,_]). zeoge (A11). ball([B,3,T,_,_,_,_]). (foydalanuvchi nuqtai nazaridan) mumkin bo'lmagan predikat nius ob'ekti bo'lgan ro'yxat elementlarining sonini aniq bilish kerak edi . Ammo unutmangki, Prolod birinchi elementni ro'yxatdan ajratish va uni alohida qayta ishlash imkonini beradi. Ushbu usul ro'yxatning uzunligidan qat'i nazar, ro'yxat tugamaguncha ishlaydi . Ro'yxat boshiga kirishning bu usuli ro'yxatni bosh va quyruqga bo'lish usuli deb ataladi. Ro'yxatni bosh va dumga bo'lish operatsiyasi vertikal chiziq (|) bilan ko'rsatilgan: [Yo'q|Ta11]. Yo'q, bu erda ro'yxatning boshini bildiradigan o'zgaruvchi, TaI o'zgaruvchisi ro'yxatning oxirini bildiradi. Misol. Roʻyxat elementlarini chop etish qoidasi [4,-9,5,3]: rG1PD_IzD ([]). rg 1 pD_IzD ([Nai|Ta11]) :- mg1De (Nai), p1, r1pD_11zD (TaI). rg1pD_IzD([4,-9,5,3]) maqsadini qondirishga harakat qilganda , qoidaning birinchi versiyasi rg1pD_IzD[] muvaffaqiyatsiz tugadi, chunki uning ob'ekti bo'sh ro'yxatdir. Aksincha, kiritilgan roʻyxat predikatning ikkinchi varianti — r1pD_113D([Nai|Ta11]) obyektiga mos keladi. Shuning uchun Nay o'zgaruvchisiga ro'yxatdagi birinchi elementning qiymati beriladi: 4, TaI o'zgaruvchisiga esa ro'yxatning qolgan qismi tayinlanadi: [-9,5,3]. Endi ro'yxatning birinchi elementi tanlangan bo'lsa, uni har qanday oddiy ob'ekt bilan bir xil tarzda ko'rib chiqish mumkin: mg15e(Nee), n1. Bundan tashqari, ro'yxatning dumi ro'yxatning o'zi bo'lganligi sababli, TaI o'zgaruvchisining qiymati pr1n5_iz5 rekursiv chaqiruvining ob'ekti sifatida ishlatilishi mumkin: pr1n5_iz5(Ta11). Ushbu pastki qoida sinovdan o'tkazilganda , TaI [-9,5,3] bo'ladi. Shunga qaramay , birinchi variant muvaffaqiyatsiz tugadi va yozishmalar ikkinchisining yordami bilan o'rnatiladi. Ney o'zgaruvchisiga -9 qiymati beriladi, so'ngra u ekranga chiqariladi va jarayon ro'yxat bilan takrorlanadi [5,3]. Natijada, Nai o'zgaruvchisi 3 qiymatini olganda, TAI o'zgaruvchisiga bo'sh ro'yxat tayinlanadi. Endi, rg1n5_iz5 (TaI) ning rekursiv chaqiruvida tAi qiymati rg1n5_iz5 ([]) qoidasining obyektiga mos keladi. Ushbu variantda rekursiv chaqiruvlar yo'qligi sababli maqsad bajarilgan deb hisoblanadi va rekursiyani tugatish sharti pr1n5_Os5 hosil bo'ladi. Shunday qilib, birinchi variant pr1n5_iz5 ga rekursiv qo'ng'iroqlar butun ro'yxatni bo'shatganda muvaffaqiyatli bo'lishiga imkon beradi. Misol: /* Ro‘yxatni ekranda ko‘rsatishda ro‘yxatni bosh va dumga bo‘lish usulidan foydalanishni ko‘rsatish */ kirish . an1sha1_iz5 = sushbo1 * pre^ca-les rg1p5_11z5(ap1sha1_11z5) bandlar ap1sha1 (["yo'lbars", "quyon", "sher", "bo'ri"]). rg1p5_iz5([]). rg1n5_iz5([Hea4|Ta11]) :- ur15e (Yo'q), n1, r1p5_iz5 (Ta11). doa1 ap1sha1 (An1sha1z_iz5), r1p5_iz5 (an1sha1z_iz5). Ro'yxatlar bo'yicha operatsiyalar Ro'yxatdagi elementni topish - bu ma'lumotlar elementi va skanerlanayotgan ro'yxatdagi element o'rtasidagi moslikni topish uchun ro'yxatni skanerlash. Agar bunday moslik topilsa, qidiruv muvaffaqiyatli bo'ladi; aks holda, qidiruv muvaffaqiyatsiz tugadi. Qidiruv ob'ektini ko'rib chiqilgan ro'yxat elementlari bilan moslashtirish uchun biz ushbu qidiruv ob'ekti va ro'yxat ob'ektlari bo'lgan predikatni chetlab o'tmaymiz: npj_1^(3 ,[1,2,3,4,5]). Tasdiqlash ob'ektlaridan birinchisi, 3, qidiruv ob'ektidir . Ikkinchisi ro'yxat [1,2,3,4,5]. Ro'yxatdagi elementni ajratib olish va uni qidiruv ob'ekti bilan solishtirish uchun siz ro'yxatni bosh va dumga bo'lish usulidan foydalanishingiz mumkin. Bu holda qidiruv strategiyasi ro'yxat boshini rekursiv ravishda ajratib olish va uni qidirish elementi bilan taqqoslashdan iborat bo'ladi. Qidiruv qoidasi qidiruv ob'ekti va joriy ro'yxat boshini solishtirishi mumkin. Taqqoslash operatsiyasining o'zi quyidagicha yozilishi mumkin : Ppy_1^(Yo'q,[Yo'q|_]). Qoidaning bu o'zgarishi qidiruv ob'ekti va ro'yxat boshi o'rtasida mos kelishini nazarda tutadi. Bunday holda, biz qidiruv ob'ekti va ro'yxatning boshi o'rtasidagi moslikni topishga harakat qilayotganimiz sababli, quyruq bilan nima sodir bo'lishiga e'tibor berishning hojati yo'q . Agar qidiruv ob'ekti va ro'yxat boshi mos keladigan bo'lsa, unda taqqoslash natijasi muvaffaqiyatli bo'ladi; bo'lmasa, muvaffaqiyatsizlik. Ammo agar ikkita ma'lumot elementi boshqacha bo'lsa, moslashishga urinish muvaffaqiyatsiz tugadi va orqaga qaytish sodir bo'ladi va qayta urinib ko'rish uchun boshqa qoida yoki fakt topiladi. Qidiruv ob'ekti va ro'yxat boshi mos kelmasa, ro'yxatdan keyingi elementni tanlaydigan va uni taqqoslash uchun taqdim etadigan qoidani taqdim etish kerak: Ppy_ 1 ^(Yo'q, [Yo'q|_]. Ppy_ 1 ^(Yo'q, [_, TaI]) Ppy 1 ^(Yo'q, TaI). Agar Ppy_1^(Yo'q, [Yo'q|_]) qoidasi bajarilmasa, orqaga qaytish sodir bo'ladi va ikkinchi variant bilan urinish amalga oshiriladi. Bunday holda, yana TaI o'zgaruvchisiga tayinlangan ro'yxat Pnj_ 1 ^ (Nai, [Nai | _]) bayonoti yordamida bosh va dumga bo'linadi va bu jarayon ushbu bayonot muvaffaqiyatli bo'lguncha takrorlanadi (da keyingi rekursiyada moslikni o'rnatish holati ) yoki muvaffaqiyatsizlik (agar ro'yxat tugagan bo'lsa). Ro'yxatlarni ajratish. Ro'yxatlar bilan ishlashda ko'pincha ro'yxatni bir necha qismlarga bo'lish kerak bo'ladi. Bu joriy ishlov berish uchun asl ro'yxatning faqat ma'lum bir qismi kerak bo'lganda kerak. ma'lumotlar elementi va uchta ro'yxat bo'lgan spI'b predikatini ko'rib chiqing : spi'b(M1<1<11e^^1^2). Bu erda M1yy1e elementi taqqoslash, ^ asl ro'yxat va ^1 va ^2 ro'yxatni bo'lish natijasida yuzaga keladigan pastki ro'yxatlardir. Agar dastlabki ro'yxatning elementi M1yy1e dan kichik yoki teng bo'lsa, u holda ^1 ro'yxatiga, kattaroq bo'lsa, u holda ^2 ro'yxatiga joylashtiriladi. Misol: spI'b(40,[30,50,20,25, 65, 95]^1^2). Bu erda qoida quyidagicha tartibga solinadi: ro'yxatni bosh va dumga bo'lish usuli yordamida keyingi element ro'yxatdan chiqariladi va keyin M1yy1e taqqoslagich bilan taqqoslanadi. Agar ushbu elementning qiymati taqqoslagich qiymatidan kichik yoki teng bo'lsa, u holda element ^1 ro'yxatiga joylashtiriladi, aks holda u ^2 ro'yxatiga joylashtiriladi. Ushbu qoidani [30,50,20,25,65,95] ro'yxatga qo'llash natijasida ^1 va ^2 ro'yxatlarining qiymatlari [30,20,25] va [50, 65, 95] mos ravishda. Ro'yxatni ajratish uchun ushbu qoidaning o'zi Prolog tilida quyidagicha yozilgan: spI'b(M1<1<11e,[Nea<1|Ta11],[Nea<1^1]^2) Neai <= M1dj1e, sp11^(M1d(11e, Ta11^1^2). spI'b(M1d | 31e, [Hea | 3|Ta11]^1, [Hea | 3^2]):- Nea > M1d1e, sp11^(M1d(11e, Ta11^1^2), sp11b(_,[],[],[]). E'tibor bering, ro'yxatni bosh va dumga bo'lish usuli ushbu qoidada manbalar ro'yxatini ajratish uchun ham, chiqish ro'yxatlarini yaratish uchun ham qo'llaniladi. Download 428.17 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling