Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
зертханалық жұмыс-12.doc
Скачиваний:
14
Добавлен:
01.07.2025
Размер:
3.17 Mб
Скачать

Пролог программалау тілі. Тілдің қысқаша анықтамаасы. Логикалық есептерді шешу.

Visual Prolog-ты орнату және жұмысты бастау

Мысалдарды көру үшін визуалды құрастыру ортасы Test Goal утилитасын пайдалану қажет. Бұл утилита Project|Test Goal командасы немесе <Ctrl>+<G> батырмалары комбинациясымен жүзеге асырылады. Визуалды құрастыру ортасы Test Goal утилитасымен мысалдарды нақты орындау үшін орындалатын жобалардың арнайы өңдеулерін қажет етеді. Әрқашанда арнайы Test Goal-жобасын құрып және оны қолдану ұсынылады.

Лабораториялық жұмыстың құрамы және оған әдістемелік түсініктеме

  1. Visual Prolog-та жұмыс атқару

  2. Пролог тілінің синтаксисі және программаның құрылымы

  3. Мысалдар мен түсіндірмелер

Visual Prolog –та жұмыс атқару

Мысалдарды орындау үшін TestGoal-жобасын құру

Мысалдарды орындау үшін TestGoal утилитасын қолданғанда Visual Prolog компиляторының бірнеше (анықталмаған) опцияларын анықтау қажет. Бұл үшін мынаны орында:

  1. Visual Prolog визуалды құрастыру ортасын қосыңыз.

VDE (визуалды құрастыру ортасы)-ны ең алғаш қосқан кезде жоба орындалмайды, сіз мына терезені көресіз:

2. Жаңа жоба құрыңыз.

Project|New Project командасын таңдаңыз, Appli­cation Expert сұқбат терезесін қосыңыз

3. Базалық каталогты және жоба атын анықтаңыз. Base Directory қатарына жоба атын төмендегідей беру ұсынылады:

C:\Program files\VIP52\DOC\Examples\TestGoal

Бұл анықтау дайын мысалдарды орындауға өте оңай. Project Name қатарында атты "TestGoal" деп берген дұрыс. Multiprogrammer Mode ұяшығына жалауша қойыңыз. Name of.PRJ File ішіне шертсеңіз TestGoal.prj жобасы файлының аты пайда болады.

Жобаның мақсатын анықтау.

Target – те суреттегідей етіп таңдау керек:

4. Құрылған TestGoal- жобасы үшін компилятордың қажетті опцияларын қойыңыз.

Compiler Options сұқбат терезесін ашу үшін Options|Project|Compiler Options командасын таңдаңыз. Warnings-ты таңдаңыз. Сосын:

  • Nondeterm-ге жалауша қойыңыз. Бұл Visual Prolog компиляторы бірнеше шешім шығара алатынын көрсетеді.

  • Non Quoted Symbols, Strong Type Conversion Check және Check Type of Predicates-тен жалаушаны алып тастаңыз. Бұл компилятордың сізге қажет емес ескертулерін көрсетпеуге қажет.

  • Таңдалған компилятордың опцияларын сақтау үшін ОК батырмасын шертіңіз.

Нәтиже мынандай түрде болады:

Редактор терезесін ашу.

Жаңа редактірлеу терезесін ашу үшін File| New командасын қолдансаңыз болады. Нәтижеде Noname атымен жаңа терезе пайда болады.

Визуалды құрастыру ортасының редакторі – стандартты тексттік редактор. Мұнда басқа тексттік редакторлары сияқты тінтуірді басқару батырмаларын және тышқанды қолданса болады. Edit мәзіріндегі Cut, Copy, Paste, Undo және Redo командаларымен жұмыс атқарады.

Программаны қосу және тестілеу.

Сіздің жүйеңіз дұрыс өңделгенін көру үшін терезеде мына тексті теріп көру керек:

GOAL

write("Hello world"),nl.

Пролог тілінің терминологиясында бұл GOAL деп аталады, және программа орындалуы үшін жеткілікті. GOAL – ды орындау үшін Project|Test Goal командасын орындау немесе <Ctrl>+<G> батырмасын шерту қажет. Егер сіздің жүйеңіз дұрыс өңделген болса, онда монитордың экраны мынандай түрде болады:

Программаның нәтижесі жоғарыдағы суретте көрсетілгендей бөлек терезеде орналасады, ол терезе Inactive C:\Program files\Vip52\BIN\WIN\32\Obj\goal$000.exe) деп аталады, басқа GOAL-ды тестілеуден алдын бұл терезені жабу қажет.

Мысалдарды тестілеу.

Мысалдарды мына каталогтан табуға болады: C:\Program files\VIP52\DOC\EXAMPLES.

Мысалдарды Test Goal-да тестілеу.

Test Goal утилитасын қолданып визуалды құрастыру ортасында мысалдардың бірін ашып, оны тестілеңіз. Оның үшін мына қадамдарды орындаңыз:

  1. Visual Prolog визуалды құрастыру ортасын қосыңыз.

  2. Арнайы TestGoal-жобасын ашу үшін мәзірдегі Project|Open Project командасын қолданыңыз.

  3. chCCeNN.pro файлдарының бірін ашу үшін мәзірдегі File|Open командасын қолданыңыз.

  4. Project|Test Goal немесе <Ctrl>+<G> батырмаларын басып мысалды тестілеңіз.

Test Goal барлық шығатын шешімдерді анықтап, Goal – да қолданылатын барлық айнымалылардың мәнін көрсетеді.

Test Goal утилитасының қасиеттеріне комментарийлар

Визуалды құрастыру ортасы Goal – ды арнайы программа ретінде интерпретациялайды, және ол өз кезегінде компиляцияланады, компонирленеді, орындалып жатқан файлға генеризацияланады және Test Goal оны орындауға жібереді. Бұл утилита генеризацияланған программа барлық мүмкін шешімдерді табуға және қолданылған айнымалылардың мәнін көрсету үшін Goal кодын іштей кеңейтеді. Test Goal утилитасы бұл кодты компилятордың опцияларын қолданып компиляциялайды.

Қателерді өңдеу.

Егер сіз программада қателік жіберіп, оны орындауға жіберсеңіз, визуалды құрастыру ортасы Errors (Warnings) терезесінде қателер тізімін шығарады.

Қате үстінен екі рет шертсеңіз, тексттегі қате орынды көрсетеді. Visual Prolog – тың интерактивті анықтамалық жүйесін <F1> батырмасы көмегімен экранға шығаруға болады. Көмек терезесі ашылғанда Search батырмасын басыңыз, сосын қате кодын теріңіз, экранда қате туралы толық ақпарат шығады.

Пролог тілінің синтаксисі және программаның құрылымы

Прологта программа мынандай құрылымға ие:

domains

/*…

домендерді жариялау

…*/

predicates

/*…

предикаттарды жариялау

…*/

goal

/*…

өрнек1, өрнек2, т.б.

…*/

clauses

/*…

факттар мен ережелер

…*/

Clauses секциясында программаның мақсатын шешетін, пролог жұмыс атқаратын факттар мен ережелер орналасады.

Predicates секциясында предикаттар және предикаттар аргументтерінің типтері (домендер) жарияланады. Предикаттар аттары әріптерден (кіші әріп) басталып, әріптер, сандар, символдар (250 символ) тізбегімен аяқталуы тиіс. Предикат аттарында -, *, /, \, |, пробел қолдануға болмайды. Предикатты жариялау мына түрде болады:

predicates

predicateName(argument_type1, argument_type2, … , argument_typeN)

Мұндағы argument_type1, ..., argument_typeN – не стандартты домендер, не domains секциясында жарияланған домендер. Домен аргументін жариялау мен аргумент типін сипаттау екеуі бір нәрсе.

Прологтың стандартты домендер типі.

Домен (аймақ) объектіге тиісті көптеген мүмкін болған мәндерді анықтайды. Прологта 6 домендер типі анықталған. Пролог предикат аргументінің мәнін белгілеу үшін домендер типтерінің аттарын қолданушының өзіне енгізуге мүмкіндік берген.

берілгендер типі

Кілттік сөз

мысал

символдар

char

'a','?','ю'

бүтін сандар

integer

88, -120

нақты сандар

real

0.25, -3.14

қатарлар

string

"robot","144"

символдық аттар

symbol

mary,a,b,c,"Mary"

файлдар

file

army.txt

Мысал:

domains

title, author = symbol

year = integer

predicates

book(title, author, year).

Немесе:

predicates

book( symbol, symbol ,integer).

Domains секциясында предикаттар аргументтері үшін қолданылатын кез-келген стандартты емес домендерді жариялаймыз. Прологта домендер басқа тілдер типтерінің аналогы болып табылады. Прологтың негізгі стандартты домендері: char, integer, real, string и symbol. Домендерді жариялаудың негізгі формасы келесі түрде болады:

domains

argument_type1, …, argument_typeN=< стандартты домен>

argument_1, …, argument_N=< құрамды домен 1>;<…>;=< құрамды домен N>

goal секциясында программаның ішкі мақсаты беріледі, бұл программаға құрастыру ортасынан тәуелсіз орындалуға мүмкіндік береді. Егер программаға ішкі мақсат берілген болса, онда пролог бірінші шешімді іздейді, және де айнымалылардың байланысты мәндері экранға шығарылмайды. Егер ішкі мақсат жоқ болса, онда жұмыс процесінде сұқбат терезесіне сыртқы мақсат шығарылады. Сыртқы мақсатты қолданғанда пролог барлық шешімдерді іздейді және айнымалылардың байланысты барлық мәндерін экранға шығарады.

Прологқа 200-ге жақын стандартты предикаттар және 12-ге жақын стандартты домендер енгізілген. Бұл предикаттарды және домендерді қолданған кезде, оларды жариялау қажет емес.

Предикаттың өлшемі(арность) – бұл оның қабылдайтын аргументтер саны. Екі бірдей атты предикат әртүрлі өлшемде болуы мүмкін. Әртүрлі өлшемді предикаттар predicates және clauses секцияларында бірге жиналуы тиіс. Бірақ олар әртүрлі деп қарастырылады.

Ережелер мынандай формада болады:

Тақырыпша:- <Өрнек1>,<Өрнек2>, ..., <ӨрнекN>

Ережеге рұқсат беру үшін пролог оның барлық өрнектеріне рұқсат беру қажет. Егер бір өрнек жалған болса, пролог артқа қайтады да алдынғы өрнектердің альтернативті шешімдерін қарастырады, сосын және алға жылжиды, бірақ басқа айнымалылар мәндерімен. Бұл процесс «қайтарыммен іздеу» ("поиск с возвратом") деп аталады.

Мысалдар:

Теннис клубы ойыншыларының аттары мен жасын көрсететін CH05EX03.PRO мысалын қарастырайық.

/* Program CH02E01.PRO */

predicates

likes(symbol,symbol)

clauses

likes(ellen,tennis).

likes(john,football).

likes(tom,baseball).

likes(eric,swimming).

likes(mark,tennis).

likes(bill,Activity):-

likes(tom, Activity).

goal

likes(bill,baseball).

1-мысалды қарастырайық. Жасы 9-дағы ойыншылар жұбын мына құрамды мақсатты беру жолымен амалға асырайық:

player(Person1,9), player(Person2,9), Person1 <> Person2.

Қарапайым тілде бұл былай болады: 9 жасар Тұлға1-ді және Тұлға1-ден өзге 9 жасар Тұлға2-ні табу.

  1. Пролог player(Person1,9)-ді іздестіреді, сосын келесі өрнекке өтеді, егер де бірінші өрнек табылса. Бірінші өрнек Person1 peter-мен байланысты. Енді пролог екінші player(Person2,9) өрнегін іздейді. player(Person2,9) да peter-мен байланысты, онда пролог үшінші соңғы өрнекті іздейді:

Person1 <> Person2

2. Person1 және Person2 peter - мен байланысты болғандықтан, бұл өрнек орындалмайды. Пролог player(Person2,9) үшін қайтарымды іздеу жасайды. Бұл player(Person2,9)-ні chris-пен байланыстырғанда орындалады.

3. Енді үшінші өрнек

Person1 <> Person2

peter және chris екеуі екі бөлек болғандықтан орныдалады.

4. Бірақ, пролог барлық мүмкін болған шешімдерді табатындаықтан, ол алдынғы мақсаттың қайтарыммен іздеу нүктесін табады.

Егер player(Person2,9)-ге susan-ды байланыстырсақ, онда пролог үшінші өрнекті қайта тексереді. peter susan-нан ерекше болғандықтан келесі шешімде табылады.

5. Сосын пролог қайтадан екінщі өрнек үшін қайтарыммен іздеу нүктесіне барады, бірақ бұл өрнек үшін мүмкіндіктер таусылғандықтан, іздеу бірінші өрнектен басталады. Person1 chris-пен байланысты, ал Person2 peter-мен, онда үшінші өрнек те байланысты, шешім тағы да табылды.

6. Сосын Крис пен Крис сәйкес болғандықтан, Крис пен Сюзанды қарастырады. Үшінші өрнек орындалады.

7. Енді Person1-ді susan-мен байланыстырып, оны Person2 peter-мен сәйкестендіреді. Осылайша бесінші шешім табылады.

8. Дәл осылай Person1-ді susan Person2 chris-ті сәйккестендіреді, сосын Person3 peter-мен, алтыншы шешім табылды.

9. Person1-ді susan, Person2 susan деп алады. Бұл өрнек орындалмағандықтан ол екінші өрнекке қайтады. Ол жерде басқа варианттар қалмағандықтан 1-өрнекке барады, ол жерде де вариант қалмағандықтан программа жұмысын тоқтатады.

Осылай СН05ЕХ03 программасы құрамды мақсат:

player(Person1,9), player(Person2,9), Person1 <> Person2 енгізілген соң, пролог мынандай жауап қайтарады:

Person1=peter, Person2=chris

Person1=peter, Person2=susan

Person1=chris, Person2=peter

Person1=chris, Person2=susan

Person1=susan, Person2=peter

Person1=susan, Person2=chris

6 Solutions