Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6d3e0551-6731-11e5-9d50-f6d299da70eeУМК-Пролог.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
470 Кб
Скачать
☆

3 Зертханалық жұмыс. Палиндромдар (тізіммен жұмыс істеу)

Тапсырма: Төмендегі мысалдарды қарастыру арқылы тақырыпты игеру. Мысалы. Тізімді қайтаруға болатын предикат өңдейік. Предикаттың екі аргументі болады: біріншісі бастапқы тізім, екіншісі —бірінші аргументтің элементтерін кері тəртіппен жазу нəтижесін алу кезіндегі тізім.

Бұл есепті шешу үшін рекурсияны қолданайық. Базис: егер бос тізімнің элементтерін кері тəртіппен жазсақ , онда қайтадан бос тізім аламыз. Рекурсия қадамы: «аударылған» тізімді алу үшін - оның аяғын аударуға жəне оған бастапқы тізімнің бірінші элементін жабыстыруға болады . Бұл ойды жазайық.

reverse([ ],[ ]). /* бос тізімді айналу бос тізімді береді */

reverse([X|T],Z):–

reverse(T,S), conc(S,[X],Z).

/* аяғын айналып оған бастапқы тізімнің оң бірінші элементін жазамыз */

Негізгі əдебиет 5 [20-38]

Қосымша əдебиет 1 [5-29]

Бақылау сұрақтары:

1. Палиндромдар дегеніміз не?

2. findall(N,mother(_,N),L) предикатының іске асу нəтижесі қалай болады?

3. Тізімнің элементін қалай өшіреміз?

4. Тізімді қалай толықтаймыз?

5. Тізімді қалай жоямыз?

4 Зертханалық жұмыс. Циклдер

Тапсырма: Тізімдегі элементтер суммасын есептеуге мүмкіндік беретін предикат құру

Негізгі əдебиет 5 [20-38]

Қосымша əдебиет 1 [5-29]

Бақылау сұраулары;

Бақылау сұраулары;

1. Bubble предикаты не орындайды ?

2. Көпіршік сұрыптау əдісінің қызметін мақсатын түсіндіріңіз.

3. Сұрыптаудың қандай алгоритмдері бар?

4. Permutation предикатының қызметін түсіндіріңіз.

5. Сыртқы сұрыптау дегеніміз ен?

5 Зертханалық жұмыс. Сыртқы мақсаттармен жұмыс істеу

Тапсырма: Берілген мағынаны екілік анықтамасынан жоятын предикатты қарастыру.Оның

үш параметірі болады. Екі кіріс (жойлатын мағына жəне бастапқы тал) жəне екінші

параметірден біріншісінен жойлуынан пайда болған нəтиже.

Негізгі əдебиет 5 [20-38]

Қосымша əдебиет 1 [5-29]

Бақылау сұраулары:

1. Сəтсіздіктен кейінгі кері қайтару не үшін қажет?

2. Предикаттар қалай біріктіріледі?

3. Қарастырылған мысалдардағы программаның мақсаты мен ішкі мақсатын атаңыз.

4. Жасанды кері қайтару дегеніміз не,

5. Стандартты предикаттар не үшін керек?

6 зертханалық жұмыс. Тізімдерді түрлендіру

Тапсырма: Екілік анықтама болып табылатын қалпына келтіруші тармақ предикатының жасап шығару, онда кездейсоқ бүтін сандар орналасқан, шыңдардың қосындысынан құралған.

Негізгі əдебиет 1 [20-38]

Қосымша əдебиет 5 [5-29]

Бақылау сұраулары:

1. Програманың нəтижесі қай жерде құрастырылады?

2. Тізімдермен жұмыс істеудің айырықшылығы неде

3. GOAL секциясында не істелінеді?

4. Рекурсии қадамы не істейді?

5. Бастапқы тіщзім қай жерде орналасқан?

7 зертханалық жұмыс. Тізімдерді өңдеу

1-мысал. Қарапайым орысша – қазақша сөздігін дайындау керек. Фактілер aud (<орысша сөз>, <қазақша аудармасы>) түрінде берілсін: Турбо Прологта берілгендер қорын мынадай түрде дайындауға болады.

Predicates

Aud (string, string)

Clouses

Aud(голова, бас)

Aud(нос, мұрын)

Aud(рот, ауыз)

Aud(тело, дене)

Aud(человек, адам)

Aud

…………………

Цель: Aud (голова,X)

X=бас

2-мысал. Адамдардың қарапайым телефон анықтамалығын құрып, сұрақ бойынша жауап шығару керек.

Оның мақсаты predicates бөліміне енгізген түрде құрылуы:

Predicates

Tel(string, string)

Goal

Write (“фамилия”-?),

Readln(Fam),

Tel(fam, telef_Nom)

Write (“телефон нөмірі “ telef_Nom”), n1.

Clauses

Tel(“Үмбетов. О”, “52-21-60”)

Tel(“Сүлтанов.М”, “55-32-14”)

Tel(“Ержан.К”, “52-21-36”).

Программа іске қосылған кезде бірден фамилия сұралады:

Fam-? Үмбетов.О

Телефон нөмірі=52-21-60

Программаға енгізілген n1-келесі жазуды жаңа жолдан бастау (курсорды жаңа жолдың басына орналастыру) стандартты операторы, Write-стандартты предикат (оператор).

Прологта пайдаланылатын айнымалылар әдеттегі программалау тілдеріндегі айнымалылардай емес. Олар үшін жадтан арнайы орын бөлінбейді. Олардың мәндері - берілгендер қорында сақталған нысандар атаулары.

Коньюнкциялы сұрақтың жазылуы да коньюнкциялы фактінің жазылуы сияқты: әр мақсат үтір арқылы бөлініп жазылады. Мысалы, сәйкес білім қоры дайындалып, Нұрғали да, Баян да ұнататын нысан сұралса, оны жазылуы:

?- unatedy (nurgali,X), unatedy (baian,X).

Мұнда Пролог берілгендер қорынан алдымен сұраққа енгізілген бірінші мақсатқа сәйкес фактіні іздейді. Егер берілгендер қорында бірінші болып «ұнатады (Нұрғали,ыстық)» фактісі кездессе, жүйе Х айнымалысына «ыстық» мәнін меншіктеп (Х=ыстық), оның мәнін басқа мақсаттарда кездесетін осындай айнымалылардың орнына қойып шығады. Одан әрі берілгендер қорынан «ұнатады (баян, ыстық)» мақсатын іздейді. Ол табылса, оған белгі қойып, екі мақсатты да қанағаттандыратын жауапты басып шығарады. Әйтпесе, Пролог іздеуді берілгендер қорыны басынан бастап қайта жүргізеді. Мұндай процесті қайту процесі не қайту механизмі деп атайды.

Сұрақта белгісіз аргументтер саны бірнеше болуы да мүмкін.

3-мысал. 7-мысал. «Жәмиляның анасы мен оның анасы кімдер-?» сұрағы берілсін, берілетін сұрақ пен шығатын жауаптың түрі:

?-ana(X,Y), ana(Y,jamilia).

X=xadisha Y=baian

Мұнда берілген сұрақ берілгендер қорымен үйлесімді болуы үшін қор мынадай түрде құрылған болуы тиіс.

ana (xadisha baian)

ana (gulnar,nurlan)

ana (baian jamilia)

………………….. т.с.с

Турбо Прологта программаны сақтап, іске қосу командасын берген кезде экранның оң жағында көрінген Dialog терезесінде берілетін команда:

Мақсат: ana(X,Y), ana(Y,jamilia)

Мұнда да, Пролог жауапты алдымен бірінші мақсатқа сәйкес іздейді, т.с.с.

Сонымен, сұрақ берілсе, Пролог оның мазмұнын берілгендер қорында сақталуы фактілермен салыстырады да, мазмұнының дұрыстығын дәлелдеуге болатынын не болмайтынын анықтайды және сәйкес жауап шығарады. Яғни, Прологта сұраққа жауап беру мақсатты ұйғарымдарды дәлелдеумен бірдей. Дәлелдеу- мақсаттың берілгендер қорымен үйлесімділігін анықтау деген ұғым. Егер сұраққа енгізілген мақсаттар бірнеше болса, Пролог алдымен бірінші мақсатты дәлелдеуге кіріседі, ол дәлелденсе, оның оң жағына енгізілген мақсаттың үйлесімділігін тексеруге кіріседі, т.с.с. Үйлесімділік болмаса, қайту процесі орындалады.

Прологта бірден бірнеше фактінің бар не жоғын тексеру сұрағы құрылымды сұрақ делінеді. Мысалы, мынадай берілгендер және т.с.с берілгендер қоры дайындалған болсын:

ushady(ushakh).

ushady(tyrna).

Khanaty_bar(tyrna).

Khanaty_bar(karlygash).

................................. .

Қорға сәйкес мынадай құрылымды сұрақ беруге болады:

?- ushady(Х), кhanaty_bar(Х).

Х= tyrna

Берілгендер қорына енгізілген қанаты бар құс екеу, екіншісі қарлығаш. Бірақ, жүйе х=karlygash жауабын шығармайды, себебі «ushady» предикаты бар мұндай факт берілгендер қорына енгізілмеген.

Тапсырма: Телефондық анықтаманың компьютерлік нұсқасын реализациялайтын

программаны жазу.

Негізгі əдебиет 5 [20-38]

Қосымша əдебиет 1 [5-29]

Бақылау сұрақтары:

1. Start операторы не істейді?

2. Gроекттің терезесін қалай тазалаймыз?

3. Программа қандай операцияларды жүзеге асырады?

4. Базаға жаңа жазбаны қосуға болады ма?

5. Пролог- программада көпшілікпен жұмыс ұйымдастырылуы қалай?

8-зертханалық жұмыс. Прологта логикалық программалау. Білімдер базасы.

Мақсаты: Прологтағы ереже және үйлесімділік ұғымдарын қарастыру. Мысалдар қарастыру.

Пролог сөйлемдері(ұйғарымдары) үш типті: фактілер, ережелер және сұрақтар. Факт – сөзсіз ақиқат болатын жеке мақсат. Мысалы, ұнатады(Ахмет, абай_жолы) фактісінде Ахметтің бір ғана «Абай жолы» кітабын ұнататыны мәлімделген. Егер Ахметтің ұнататын кітаптары көп болса, онда оның бәрін атап шықпай-ақ, қысқаша Unatadi(axmet, kitap) фактісі түрінде жазуға болады. Мұндай факт ереже деп аталады. Яғни, ереже мен фактінің айырмашылығы сөз мәнінде ғана.

Жалы, Прологта ережелер деп көбінесе бір фактінің басқа фактілер тобына байланыстылығы көрсетіліп, жасанды интелектіде пайдаланатын егер ... онда командаса арқылы жазылған сөйлемдерді айтады. Мысалы, табиғи тілде жазылған ережелер:

Егер жаңбыр жауып тұрса, онда дала дымқыл.

Егер жәндік үлкен және қанаттары бар болса, онда ол –құс.

Сонымен, ереже –нысандар және олардың арасындағы қатыстар жөнінде біршама ұйғарым(сөйлем). Ол Прологта басы мен денеден тұратын етіп жазылады:

<басы>:-<дене>.

Дене –ереженің егер бөлімі (мақсат пен мақсаттар). Ол кейбір жағдайларда ақиқат болатын конъюнкциядан не жеке мақсаттан тұруы мүмкін. Конъюнкцияға енген жеке мақсаттар үтір (,) арқылы бөлініп жазылады.

Басы-ереженің онда бөлімі (-негізгі мақсат (негізгі мақсат ереже тақырыбы деп те аталады)).

:- - ереженің басы мен денесінің арасына қойылатын қос нүкте мен сызықшадан тұратын белгі. Ол ережеге енгізілетін егер қызметші сөзін алмастырады (Турбо Прологта:- белгісінің орнына if кілттік сөзін жазуға да болады).

.(нүкте)- ереже соңына қойылатын белгі.

Жалпы, факт- ақиқат болатын жеке мақсат (фактіні мақсаты жоқ ақиқат ереже деп қарастыруға болады), ал ереже- мақсат пен тақырыбын логикалық түрде байланыстыратын сөйлем. Ереженің толық ақиқаттық пікір болмауы да мүмкін.

  1. мысал: құс (Х) :- үлкен_жәндік(Х), /* нысанды тану */

қанаты_бар(Х).

Ит(Х) :- әке (Х,У), ит (У)

Соңғы ереженің оқылуы: егер У-тің әкесі Х, ал У ит болса, онда Х-ит (Х,У- байланыстырылған айнымалылар). Түсінікті болу үшін ережені ағаш түрінде бейнелеп көрсетуге де болады:

Мысалға енгізілген ережелерге және дайындалған фактлерге сәйкес Турбо Прологта программаның құрылуы:

domains

S=string

predicates

kus(S) ulken_jandik(S)

kanaty_bar(S)

it(S) ake(S,S)

clauset

kus(X) :- ulken_jandik(X), kanaty_bar(X).

It1(X):-ake(X,Y), it(Y).

Ulken_jandik(tyrna).

Kanaty_bar(tyrna).

It(bars).

Ake(moinak,bars).

…………………….

Ережелер мен фактілер сақталған соң сәйкес сұрақтар арқылы қажетті жауаптарды шығару қиын емес. Сұрақ белгісі теріліп алынған соң, ал Турбо Прологта іске қосу командасын берген соң сұхбат терезесінде көрінген. Цель: сөзінен кейін ереженің басы жазылуы тиіс. Мысалы:

Цель: it1(X)

X=moynak

Цель: кus(X)

X=turna

Ереже басы бірнеше сөз тіркесіне тұрса, араларына астын сызу (_) белгісін қойып кеткен жөн, оның ешқандай түсінігі жоқ, тек сөздерді біріктіріп жазуға ыңғайлы, мысалы: ата_ана. Асты сызу белгісін жасырын (анонимдік) айнымалы деп те атайды.

Егер ереже денесіне нақты мәндер енгізілсе, аргументтері айнымалылар болатын сұраққа жауап ретінде айнымалылардың нақты мәндері шығады: Мысал: ? – unaidy(axmet,X) &-kyz(X), unaidy(X,kitap).

Сұрағы берілген кезде Пролог сұрақ денесінің сол жағында бірінші болып жазылған kyz(Х) мақсатын берілген қорымен салыстырады да, қыз(Х) [kyz(X)] мақсатына үйлесімді факт табылса, оның аргументі Х-ке меншіктеп, Х айнымалысы кездесетін барлық жерге осы мәнді қойып шығады, т.с.с. Айнымалыны сәйкес мәнімен алмастыру айнымалыны нақтылау делінеді.

Ескертетін жайт: сұрақ беру кезінде ереже денесіне енгізілген мақсаттардың жазылу реті өте маңызды. Себебі, Пролог оларды тек солдан оңға реті бойынша қабылдап алып, іздеу жүргізеді. Жазылу реті бұзылса, шығатын жауаптың бөлек болып шығуы мүмкін.

Жүйеге фактілерге қосып ережелер де енгізілсе, оларды білім қоры деп, ал, біршама фактілер мен ережелер тобын процедура деп те атайды. Нақты фактілер мен ережелер жиыны- сұраққа жауап дайындалатын қарапайым программада. Яғни, Прологта берілгендер қоры, білім қоры және программалар бір түрлес. Оларды тек Пролог нысандарына екі түрлі көзқарас деп түсінуге болады. Бірақ, программалардың көпшілігі, мысалы, сараптаушы жүйелерді дайындау программаларының үлкен және олар мақсаттарды дәлелдеуді қажет ететін логикалық ұйғарымдар түрінде құрылады. Фактілер жиынтығы логикалық программалаудың қарапайым түрі. Күрделі программаға жаңа сөйлемдер және өңдеуді қажет ететін процедураларды қосып программаны кеңейту де мүмкін.

Прологта фактілерге енгізілетін айнымалылар жалпылық квантормен айқын емес түрде байланысты, мысалы, ұнатады (Х,алма) фактісі кез-клген Х-тің алманы ұнататынын білдіреді. Барлық айнымалылар жалпылық кванторлы болғандықтан программаларда оның белгісі енгізілмей тастап кетеді.

Сонымен, программа Пролог- жүйе ішіне сақталып қойылады. Сұрақ берілген кезде Пролог талқылаудың кері тізбегін пайдаланып, әр мақсатты дәлелдеуге тырысады. Егер бір мақсат дәлелденбесе (үйлесімді болмаса), Пролог өзі белгіленген айнымалы мәндерін өшіріп, дәлелдеуді қор басынан бастап қайта жүргізеді. Яғни, іздеу тереңдетіліп және қайту механизмі қолданылып жүргізіледі.

2-мысал. Табиғи тілде мынадай ереже берілсін: егер Х атаулы ер кісінің әкесі А және У атаулы әйелдің әкесі де А болса, онда Х-пен У – бір туыс.

Ерлер мен әйелдердің әкелері жөнінде екі тізім дайындалған болсын:

1-тізім(ерлер)

2-тізім (әйелдер)

әке 1 (Оспан,Марат)

әке 1 (Нұрлан, Болат)

әке 1 (Ержан, Қажым)

әке 1 (Мұрат, Сұлтан)

әке 2 (Мұстафа, Айгүл)

әке 2 (Мұрат, Шолпан)

әке 2 (Нұрлан, Маржан)

әке 2 (Бахыт, Жәния)

Тізімдерді қарап шығып, әкелері бір ерлер мен әйелдерді анықтау керек.

Жоғарғы тізімдерде олар:

Болат пен Маржан (әкелері-Нұрлан),

Сұлтан мен Шолпан (әкелері - Мұрат )

Есепті шешу үшін алдымен екі тізімді бір білім қоры түрінде дайындап, арнайы атаумен сақтау керек (мысалы, Туыстар). Ол – дайындалған программада:

Tuis (X, Y, A): -ake1 (A,X), ake2 (A,Y).

Ake1 (ospan, marat).

Ake1 (nurlan, bolat).

……………………

Ake2 (baxit,jania).

Берілетін сұрақ ?-tuis (X,Y,A).

Білім қорында әкелері бір туыстардың бар екені ақиқат түрінде алынып, ережеге енгізілген әр мақсаттың ақиқаттығы дәлелденеді. Бұл талқылаудың кері тізбегі.

Сұрақ беріліп программа іске қосылған кезде Пролог алдымен ереже денесінің сол жағында бірінші болып жазылған аke1(А,Х) мақсатын дәлелдеуге кіріседі. Дәлелдеу берілгендер қорының басынан бастап жүргізілетіндіктен, мақсаттың бірінші фактіге сәйкес келетінін анықтап, жүйе мынадай меншіктеу командаларын орындайды:

A=ospan, X=marat

Одан әрі, жүйе ережеге енгізілген барлық А және Х айнымалыларының орнына осы мәндерді қойып шығарды да, келесі әке2 (Оспан,У) мақсатын дәлелдеуге кіріседі. Бірақ берілгендер қорында «Оспан» аргументі бірінші болып жазылған басқа факт жоқ. Сондықтан, Пролог берілгендер қорының басына қайтып өтеді де, баламалы дәлелдеуге қайта кіріседі. Мұнда Пролог алдымен бірінші фактіге сәйкес А, Х айнымалыларына меншіктелген мәндерді өшіріп тастайды да, келесі фактіні тексеруге көшеді. Келесі факті әке1 (А,Х) мақсатына салыстырмалы болғандықтан, жаңа меншіктеу командасын орындайды: А= Нұрлан, Х=Болат. Одан әрі әке2 (нұрлан, У) мақсатына салыстырмалы фактіні іздеу барысында Пролог сәйкес фактіні табады да, У=Маржан меншіктеуін орындап, сәйкес мәндерді басып шығарады: X=bolat Y=marjan A=nurlan

Сұраққа сәйкес келесі мәндерді шығару үшін клавиатура арқылы «;» пернесін басу керек (Турбо Прологта олар автоматты түрде көрінеді, пернені басу қажет емес).

Сонымен, егер сұраққа енгізілген ұйғарымның бір ғана мақсаты дәлелденбесе де, берілгендер қорында сұраққа үйлесімді ұйғарым жоқ (сұрақ үйлесімсіз) деп есептелінеді. Яғни, сұрақ үшін барлық мақсаттардың дәлелденуі міндетті. Ал, Прологта сұраққа енгізілген айнымалылардың бәріне «барлығы үшін» (жалпылау) кванторы әсер етеді.

Жоғарыдағы мысалға сәйкес білім қорының (программаның) Турбо Прологта жазылуы:

Predicates

Tuis (string, string, string)

Ake1(string, string)

Ake2(string, string)

Clauses

Tuis(X,Y,A): - ake1(A,X), ake2(A,Y).

Ake1(ospan,marat)

Ake1(nurlan,bolat).

………….

Ake2(baxit,jania)

Прологта программаның орындалу жолын (М мақсатын іздеуді) іздеу ағашы түрінде бейнелеп көрсетуге болады. Мұнда М ағаштың негізгі түбірі ретінде алынады да, ереже денесіне енгізілген мақсаттар ағаштың келесі түбірлері ретінде алынады. Әр түбірдің өзінен шығатын қырлары болуы мүмкін, олар берілген программаға сәйкес М мақсатын дәлелдеуге пайдаланылады. Кейбір түбірлер мақсатқа үйлесімсіз болуы мүмкін, бұл кезде қайту механизмі орындалады.

Мысалы, жоғарыда берілген программаның орындау сұрағын қарастырайық: tuis(X,Y,A): - ake1(A,X), ake2(A,Y) оны орындау жолын ағаш түрінде бейнелеуге болады:

Прологтан әр қатардан тұратын жазбаларды (тізімді) да ашуға болады:

3-мысал. Студенттердің математика мен информатикадан алған бағалары көрсетілген мынадай тізімнің әрқайсысын жолдық типке алып, Турбо Пролог терезесінен алу керек:

1.ахметов О. 4 4

2.Ермеков Н. 4 3

3.Нұрланова Н. 5 5

Программаны мынадай түрде құруға болады:

Domains

T=string

Predicates

tizim(T)

clauses

tizim(“1.Ахметов О. 4 4”)

tizim(“2.Ермеков Н. 4 3”)

tizim(“3.Нұрланова М. 5 5 ”)

Компиляциялап, іске қосу командасын берген соң сұхбаттық терезеде берілетін команда – цель : tizim(T).

Тапсырма. Прологта әке, ата жөнінде мынандай сұрақтарды дайындаңыз:

  1. Ахметтің әкесі кім?

  2. Айсұлудың баласы бар ма?

  3. Ахметтің әкесінің әкесі кім?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]