Алгоритмдер жєне деректер структурасы


-12 тақырып. Прологта логикалық программалау. Білімдер базасы



бет26/34
Дата02.01.2022
өлшемі0.74 Mb.
#453425
1   ...   22   23   24   25   26   27   28   29   ...   34
ПРОЛОГ мысалдары

11-12 тақырып. Прологта логикалық программалау. Білімдер базасы.

Мақсаты: Прологтағы ереже және үйлесімділік ұғымдарын қарастыру. Мысалдар қарастыру.
Пролог сөйлемдері(ұйғарымдары) үш типті: фактілер, ережелер және сұрақтар. Факт – сөзсіз ақиқат болатын жеке мақсат. Мысалы, ұнатады(Ахмет, абай_жолы) фактісінде Ахметтің бір ғана «Абай жолы» кітабын ұнататыны мәлімделген. Егер Ахметтің ұнататын кітаптары көп болса, онда оның бәрін атап шықпай-ақ, қысқаша 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   ...   22   23   24   25   26   27   28   29   ...   34




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет