Рекурсивті тәртіптерді анықтау және GNU. Prolog қолдану презентация

Содержание

Слайд 2

Прологта программаның сипаттамасының не бәрі 3 түр бар: фактілер,ереже және

Прологта программаның сипаттамасының не бәрі 3 түр бар: фактілер,ереже және сұрақтар.


Факт:аты(параметрлер).
Сұрақ: ?– сұрақ тұлғасы.
Ереже: аты(параметрлер):– ереже тұлғасы.
Ережеде белгіге дейін:–ереженің басы орналасқан, содан кейін– ереже тұлғасы.Факт ережеден әрдайым шарттарды дұрыс сиппатаумен ерекше ереже тұлғасын дәлелдегенде ғана ереже дұрыс болады.
«Ізашар» программасы
predecessor(X, Y) :– parent(X, Y).
predecessor(X, Y) :– parent(X, Z), predecessor(Z, Y).
Пролог тілінде құрылған программаның барлығын орыс тілінде оқуға болады. Мына жағдайда:Х У-тің ізашары
Слайд 3

болып табылады, немесе Х У-тің ата-анасы болса немесе Z-тің ата-анасы,

болып табылады, немесе Х У-тің ата-анасы болса немесе Z-тің ата-анасы, У-тің

ізашары болып табылатын.
Сұрақ:
?– predecessor(tom, mary).
Yes
parent(tom, bob).
parent(ann, bob).
parent(tom, liza).
parent(bob, mary).
parent(bob, luk).
parent(luk, kate).
predecessor(X, Y) : - parent (X,Y).
predecessor(X, Y) : - parent (X,Z) , predecessor (Z,Y)
Ережеде 8 үтір қолданылады. Үтір ЖӘНЕ».
Слайд 4

Трассировка Пролог 1-ден 6-ға дейін ережені жояды, бірқ барлық жағдайда

Трассировка
Пролог 1-ден 6-ға дейін ережені жояды, бірқ барлық жағдайда аттары сәйкес

келмейді.
Пролог 7 ережесі атына сәйкес келгенді қолданады, бірақ алмастырылуда келесі мағына сәйкес келеді: X = tom, Y = mary. Келесі аралық мақсат– parent(tom, mary). 7 сәйкес келгенін анықтау үшін осы аралық мақсаттың анықтылығын дәлелдеу керек.
7. X = tom, Y = mary  parent(tom, mary)
Пролог тілінде аралық мақсат резольвента деп аталады. 1 мен 6 арасындағы ережені Пролог тілі жояды, бірақ барлық жағдайда бір ғана отрибут сәйкес келеді. 7 мен 8 ережесінде аттары сәйкес келмейді. Бұл жағдайда дәлелдеу ойдағыдай емес. (1') 7. X = tom, Y = mary  parent(tom, mary)  no Пролог 8 ережесіне аты сәйкес келген ережені пайдаланады, бірақ ауыстырмалы жүйеде келесі мағына беріледі: X = tom, Y = mary. Келесі аралық мақсат – parent(tom, Z).
Слайд 5

(2) 8. X = tom, Y= mary  parent (

(2) 8. X = tom, Y= mary  parent ( tom,

Z)
1. parent(tom, bob), Z = bob  yes
(2') 8. X=tom, Y=mary parent(tom, Z), Z = bob predecessor(bob, mary)
(4) 7. X = bob Y = mary  parent(bob, mary)
(5) 1. parent(bob, mary) = parent(tom, bob) no
(6) 2. parent(bob, mary) = parent(ann, bob)  no
3. parent(bob, mary) = parent(tom, liza)  no
4. parent(bob, mary) = parent(bob, mary)  yes
(4') 7. X = bob, Y = mary  parent (bob, mary)  yes
(2'') 8. X = tom, Y = mary  parent(tom, Z), Z = bob predecessor(bob, mary)  yes
Жақшада трассировка қадамдары көрсетілген, нөмірдегі штрихі сәйкес ережеге оралуін және оның дәлелдеу керектігін білдіреді, қадамның нөмерінен кейін- пайдаланып жатқан ереженің нөмірі. 5- тен 8- дейін трассировка қадамдары Пролог резольвентаны қалай дәлелдегенін көрсетеді.
Слайд 6

Трассировка процесінде айнымалыларға мән беретініміз. Бұл жерде Прологтың ерекшелігі бар:

Трассировка процесінде айнымалыларға мән беретініміз. Бұл жерде Прологтың ерекшелігі бар: егер

айнымалыға мән берілсе, онда бұл есепте айнымалының мәні өзгерілмейді. Және де айнымалының аты тек бір ереже көлемінде жұмыс істейді. Яғни, Х анымалының мәні әр түрлі ережеде әр түрлі.
grandparent программаның мысалында: X айнымалы 7 ереже көлемінде ереженің оң және сол жағында бір ғана анымалы. Бірақ Х анымалы 7 және 8 ережеде - басқа айнымалылар, негізінде әр түрлі аттары болу мүмкін.
Назар аударыңыз, программада 8 ережесі – рекурсивті. Бұл негізгі толық жағдай: Пролог тілінде бұл принципті көп жағдайда қолданады. Процесте дәлелдеуде қайтарымдар бақыланады, мысалы, дәлелдеуде (1) – (1’) жоғарыда көрсетілген дәлелдеу. Дәлелдеу рекурсивті түрде.
Слайд 7

болғандықтан, қайтару кезінде дәлелдеу жүйесі көп болуы мүмкін. 7 мен

болғандықтан, қайтару кезінде дәлелдеу жүйесі көп болуы мүмкін. 7 мен 8

ережелерінің орындарын ауыстыруға болады. Бұл жағдайда ізсалушы түрінде жазуға болатын мақсатты анықтау процессін де өзгертеді. 1 мен 6 арасындағы ереже, 7 мен 8 сияқты өзара процедура құрады. Процедура бұл – бір тасты ережелер жиынтығы 7 мен 8 ережелері біріктіру мүмкін.
predecessor(X, Y) :– parent(X, Y); parent(X, Z), predecessor(Z, Y).
Үтірлі нүкте «НЕМЕСЕ». Бұл қасиетті абайлап қолдану қажет. Шартты мысал:
А :– В, С; D, Е, F. ⇔ А :– (В, С); (D, Е, F). ⇔
А :– В, С.
А :– D, Е, F.
Слайд 8

Дәріс №12 Рекурсивті тәртіптерді анықтау және GNU Prolog қолдану

Дәріс №12

Рекурсивті тәртіптерді анықтау және GNU Prolog қолдану

Слайд 9

GNU Prolog орнату жүйесінен кейін жұмыс үстелінде жарлық пайда болады,

GNU Prolog орнату жүйесінен кейін жұмыс үстелінде жарлық пайда болады, және

ода жұмыстық мәліметтер көрсетілмейді, сондықтан барлық жүктелетін программаның мәтіні жұмыс үстелінен іздейді. Мұны шешудің негізгі екі жолы бар:
Жұмыс мәліметін жазатын және программаның мәтінін орналастыратын Пролог тілінде жүктелетін,
(2) GNU Prolog жүктеп BIN папкасынан gprolog.exe ашқанда, барлық жүктелгендер BIN папкасында орналасқандығы уралы ойлайды
Пролог файлдардың кеңейтілуі .рl.
В GNU Prolog программа мәтіні және экранға шығаруы ағыл. тілде болу қажет.
Файлды ашу / жүктеу үшін 2 жолы бар:
?– consult(файл_аты_ешқандай_кеңейтілімсіз).
?– [файл_аты_ешқандай_кеңейтілімсіз].
Слайд 10

«fact.pl» файлда қолданатын мысал: ?– [fact].compiling C:\soft\GNU–Prolog\bin\fact.pl for byte code...C:\soft\GNU–Prolog\bin\fact.pl

«fact.pl» файлда қолданатын мысал:
?– [fact].compiling C:\soft\GNU–Prolog\bin\fact.pl for byte code...C:\soft\GNU–Prolog\bin\fact.pl compiled, 1

lines read – 856 bytes written, 15 ms
Егер мәтінді компиляциялауда қаже болатын болса онда, қаже болған жердегі жол мен бағанда қате туралы хабарлама шығады. Прологта өзгертілген мәтінді жүктеуде reconsult(имя_файла) командасын пайдалану керек. Жадыда жүктелген программаның мәнін тексеру үшін listing предикатын қолдануға болады.
Маңызды, GNU Prolog-та программа мәтіні және экранға шығару тұжырымы ағылшын тілінде болуы керек, орыс тілін қабылдамайды. Алға шегіну: write(X) – тұжырымды шығару мағынасы X экранға ауыспалы. Онда:
?–
Слайд 11

X = 2, write(X). 2 X = 2 Yes Сонымен

X = 2, write(X).
2
X = 2
Yes
Сонымен қатар:
?– X = 2.?– write(X).
16
yes 
Соңғы

мысалда мағынасы анықталмаған. Ол негізінен басында көрсетілген негіз қасиетінің мысалы болып табылады. Прологтың маңызды қасиеті: ол терминдері берілмей құрылған программалау тілі. Оны қолдану үшін табиғатта жоқ терминдері берілмеген Пролог тілінің компьютері қажет. Сондықтан Пролог тілі дәлелдемелерді көрсетеді: тізімнің ережесіне сәйкес бойынша жоғарыдан төменге қарай, бір ережені дәлелдеу үшіән солдан оңға қарай программада көрсету.Прологтың басқа маңызды қасиеті: Прологта «Ия» және «Жоқ» не деп аталады? Ия 
Слайд 12

Мен мұны дәлелдей алдым Жоқ  мен мұны дәлелдей алмадым.Программаны

Мен мұны дәлелдей алдым Жоқ  мен мұны дәлелдей алмадым.Программаны қарастырамыз:
fallible(X)

:– man(X). man(socrates).Программа мәтінін оқимыз: «Барлық адамдар қателеседі. Сократ – адам».Сұрақ береміз: ?– fallible(socrates).yes«Сократ қателесе ма?» – «Ия»?– fallible(platon).no«Платон қателесе ма?» – «Жоқ»Неге Платон қателеспейді? Өйткені ол адам емес! (Сұраққа қандай жауап болады?- man(platon). Мысал көрсетеді, «Платон қателесе ма?» сұраққа Пролог жауап береді «Мен мұны дәлелдей алмаймын».Сонымен:Проглогтың ауыспалы маңызды қасиеттері: әртүрлі ережелерде және сұраныстарда тәуелді емес, бірақ дәлелдеу жүйесінде мағынасы тек қайтаруда өзгеруі мүмкін. Прологта дәлелдеу жүйесі рекурсия принциптерін қолдануда жүйеленеді, бірақ дәлделдеу кезінде көбнесе қайтарым орын алады (backtracking).Прологта «Жоқ» «Мен мұны дәлелдей алмаймын» мағынасын береді. Құрылымды программалау тілінен Прологтың айырмашылығы – ол үндеулі тіл болып табылады. Мұны , бұл жауап қалай алғынғанға емес, сұраққа не жауап беретіндігін негіздейміз(құрылымды тілдер).
Слайд 13

Пролог тілінде жазылған кез-келген программа жаратылыстану тілінде оқылуы мүмкін («Сократ»

Пролог тілінде жазылған кез-келген программа жаратылыстану тілінде оқылуы мүмкін («Сократ»

мысалына қараңыз).
Негізгі анықтамалар: Атом – латын символдарының жалғасуы, цифр мен белгілердің ерекшеленуі, латын альфавитінің әріпінен басталады немесе бір незігді жақшада көрсетіледі. Мысалы, tom, niL, n_32, 'South America'. Файлдармен жұмыс істеген кезде файлдан жолды оқуға болмайды, GNU Prolog бас әріптерінен басталатындығы дұрыс емес. Ауыспалы – латын символдарының жалғасы, сан мен белгінің ерекшеленуі, латын әріптерінің басынан басталады. Латын символдарының жалғасуы, сан мен белгінің ерекшеленуі, ерекшелеудің белгісінен басталады. Соңғы негізде ол аты берілмеген ауыспалы негіз деп аталады, және құрастырушы үшін мағынасы бәрібір болған жағдайда. Бір ережеде атауы жоқ ауыспалы негіз кездескенде әр түрлі мағына беруі мүмкін. Мысалы, Atom, VaRiAbLe, _345, _.Пролог программалау тілінде мәтіні жүктелу кезінде «Ескерту. Х ауыспалы ешқайда қолданылмайды!!!» деген хабарламаны оқыған боларсыз. Пролог сіз ауыспалы негізді бердіңіз, бірақ ешқайда қолданбайсыз деп хабарлама береді. Егер ол
Имя файла: Рекурсивті-тәртіптерді-анықтау-және-GNU.-Prolog-қолдану.pptx
Количество просмотров: 88
Количество скачиваний: 0