Дәріс №11
Дәріс №12
1.32M
Категория: ПрограммированиеПрограммирование

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

1. Дәріс №11

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

2.

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

3.

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

4.

Трассировка
Пролог 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 ( tom, Z)
(3) 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
(7) 3. parent(bob, mary) = parent(tom, liza)
no
(8) 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 мен 8 ережелерінің
орындарын ауыстыруға болады. Бұл жағдайда
ізсалушы түрінде жазуға болатын мақсатты
анықтау процессін де өзгертеді. 1 мен 6
арасындағы ереже, 7 мен 8 сияқты өзара
процедура құрады. Процедура бұл – бір тасты
ережелер жиынтығы 7 мен 8 ережелері біріктіру
мүмкін.
predecessor(X, Y) :– parent(X, Y); parent(X, Z),
predecessor(Z, Y).
Үтірлі нүкте «НЕМЕСЕ». Бұл қасиетті абайлап
қолдану қажет. Шартты мысал:
А :– В, С; D, Е, F. А :– (В, С); (D, Е, F).
А :– В, С.

8. Дәріс №12

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

9.

GNU Prolog орнату жүйесінен кейін жұмыс үстелінде
жарлық пайда болады, және ода жұмыстық
мәліметтер көрсетілмейді, сондықтан барлық
жүктелетін программаның мәтіні жұмыс үстелінен
іздейді. Мұны шешудің негізгі екі жолы бар:
(1) Жұмыс мәліметін жазатын және программаның
мәтінін орналастыратын Пролог тілінде жүктелетін,
(2) (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 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).
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, _.Пролог
программалау тілінде мәтіні жүктелу кезінде «Ескерту. Х
ауыспалы ешқайда қолданылмайды!!!» деген хабарламаны
оқыған боларсыз. Пролог сіз ауыспалы негізді бердіңіз, бірақ
ешқайда қолданбайсыз деп хабарлама береді. Егер ол

14.

сізге керек емес жағдайда – аты жоқ ауыспалы негізді
қолдансаңыз, Пролог сізге ұрыспайды.
Құрылымдар – Пролог тілінің негізгі терминдері. Мысалы,
Күн құрылымнан тұруы мүмкін, күннен, айдан және жылдан
тұратын.Күні көрсету үшін біз функторды қолданамыз: date(3,
march, 2002). date 3
march
2002Мұнда, date – аты,
жақшада – функтор параметрлері. Ескерту, date мен ойлаған
сөз, Пролог программау тілінде жоқ. Мен күнді параметрлер
жолын өзгертіп басқаша атауыма болатын еді.Мұнда ең
маңыздысы – мұғалімді және өзін шатастырмау керек.
Құрылымға сұраныс:?– date(Day, march, 2002).Функтор –
құрымысды термин, в качестве имени используется атом, за
которым в скобках через запятую перечисляются параметры
функтора. Параметрлеу негізінде әр түрлі логикалық
терминдер қолданылады. Онда атомдар, функторлар,
математикалық сөйлемдер болуы мүмкін. Мысалы, d(t(334, m),
list). Мысалы, біз фигураны жазықтықта сипаттап жатырмыз.
Олар нүкте негізінде сипатталады. Сипаттаудың – негізгі
варианты - көпнегізделген. Мұны қалай істеуге болады нұсқалар бар ма? Берілк нүктесі: point(X, Y).
English     Русский Правила