лаборатории по компютърни науки, изпит

лабораторни упражнения и задачи по програмиране и информатика, изпит по информатика

програмата
цели

Нормална форма на Backus-Naur

така, БНФ използва следните обозначения:

Символ: = четим като "a-priory" ("Това е"). Вляво от символа е обясняваната концепция, вдясно е обяснителната конструкция. например,

Частите от израза, използвани за обозначаване на синтактичната структура на езика, са затворени в ъглови скоби; в нашия пример това и .

Символ | означава булево или и се използва за отделяне на различни еквивалентни алтернативни обяснения на дефинираната концепция.

Използвайки този символ, можете например да дефинирате десетична цифра:

Ако част от конструкция е затворена в квадратни скоби [], това означава, че тя не е задължителна, т.е. може да отсъства.

показва, че цяло число може да бъде обяснено като положително цяло число, което може или не може да бъде предшествано от знак минус.

Символът * показва, че синтактичната структура пред него може да се повтаря произволен брой пъти (започвайки от нула и нагоре). Понякога вместо * се използват къдрави скоби (), които по същество са еквивалентни на него.

Нека отново дефинираме положително цяло число, използвайки BNF нотация:

Което означава, че положително цяло число се състои от една или повече цифри.

Структура на програма Пролог

Стандартна програма Prolog се състои от следващите раздели:

    Константи

Незадължителен раздел за постоянна дефиниция.

Домейни

Раздел за описание на домейн (подобно на описанието на типовете данни).

Раздел, описващ предикати (подобно на раздела, описващ процедури и функции); е по същество модел за писане на факти в раздела Клаузи.

Клаузи

Твърдения (аналог: основно тяло на програмата).

Цел

Целева декларация - "цел".

домейни a = символ предсказва харесвания (a, a) клаузи харесвания (mary, ябълки).

Отидете в диалоговия прозорец (меню Run) и въведете заявката:

В резултат на това прозорецът трябва да показва отговора вярно

Факти и правила

Често програма, написана в Prolog, се нарича база от знания.

Правилата за изречения са както следва:

Където A е заглавието или главата на изречението и B1. Bn е тялото.

Факт обикновено заявява, че се изпълнява някаква връзка между обекти и съдържа:

  • отношения
  • обект или обекти, затворени в скоби (аргументи)
  • завършва с точка (.)

Пример за факт:

харесвания (сметка, кучета).

където харесванията са факт
сметка, кучета - аргументи на факта, между които е изпълнено отношението (харесвания)

Защото релация в математическата логика обикновено се нарича предикати, тогава понякога ще използваме понятието "предикат" вместо "факт" или "правило".

Ако един факт се състои само от заглавие, тогава можем да кажем, че факт е такъв изречение с празно тяло.

Аргументът на факт или предикат може да бъде константа, променлива или сложен обект; т. нар. локалност (n-локалност) на факта.

Разликата между константа и променлива: константа получава стойността си в раздела, описващ константи, докато променлива се инициализира по време на изпълнението на програмата.

В следващия пример задръжте курсора на мишката върху части от структурите и ще се появи подсказка:

харесвания (сметка, кучета). - Бил обича кучета.
птица (воробей). Птица - врабче.

По този начин, в примера, харесвания е името на двуаргументен предикат (факт), в който низовата константа "bill" е първият аргумент, а "кучета" е вторият аргумент.

домейни a = символ b = цяло число предикати възраст (a, b) клаузи възраст (.). ... (.). ... (.).

Въведете програмния код в компилатора.

цел Е формулировка на проблема, която програмата трябва да реши. Целта служи и като „спусък“ за стартиране на програмата.

Turbo-Prolog използва както вътрешни цели, които се съдържат в програмата, така и външни цели, които се въвеждат от клавиатурата след стартиране на програмата. Тук има две възможности:

  1. Ако целта е факт, тогава Turbo Prolog отговаря True или False:

Буквално: Мери обича ябълките.

  1. Ако целта съдържа променливи, тогава Turbo-Prolog издава онези стойности, които водят до решението:

Буквално: Какво обича Мери?

И така, нашият пример може да бъде както факт, така и цел:

харесва (Мери, ябълки). - Мери обича ябълки и обича ли Мери ябълки?

Алгоритъм за програмиране

Програмата за компилация TProlog се състои от разделите, описани в примера:

предикати харесва (a, a)

клаузи харесвания (Мери, ябълки). харесва (Мери, портокали). цвят (ябълки, червен).

цел харесва (mary, X), пишете ("mary lyubit", X).

Резултатът пример би бил: "ябълки на мери любит".

В този пример целта е записана като секция GOAL точно в програмата, но трябва да имате предвид, че най-често целите, които изискват логичен отговор (true или false), се записват в прозореца Dialog (тогава целта не е написано в програмата)

Безкраен цикъл

В горния пример резултатът е само първият от трите факта:

клаузи харесвания (Мери, ябълки). харесва (Мери, портокали). цвят (ябълки, червен). цел харесва (mary, X), пишете ("mary lyubit", X).

Резултатът ще върне само ябълки. Въпреки че все още има портокали.

цел харесва (mary, X), пише ("mary lyubit", X), nl, не успява.

nl - означава преход към следващия ред (всяка стойност се показва на нов ред).
Резултат:
"Мери Любит ябълки".
"Мери любит портокали".

Цял код на програмата:

домейни a = символ предсказва лайкове (a, a) клаузи харесвания (mary, ябълки). харесва (Мери, портокали). цвят (ябълки, червен). цел харесва (mary, X), пише ("mary lyubit", X), nl, не успява.

Нека разгледаме друг пример.

Код на програмата без заявки:

домейни a = символ предикати построени (a, a) съхранявани (a, a) краде (a, a) улавя (a, a) траши (a, a) млека (a, a) се кара (a, a) събужда (a а) изградени клаузи (крик, къща). съхранявани (пшеница, килер). краде (bird_tit, пшеница). улови (котка, птица_tit). пърхащи (котка, птица_тит). пърха (куче, котка). млека (старица, крава). се кара (овчарка, старица). събуди се (two_cocks, пастир).

? - построена (X, къща)./* Кой е построил къщата? * /

? - улов (котка, Y)/* Кого котката хваща? * /

Отговор: Y = bird_tit

? - се кара (X, Y)./* Кой с кого се бие? * /

Отговор: X = овчар, Y = старица

? - съхранява се (X, килер на къщата), краде (X, Y)./* Какво се съхранява в килера у дома и кой го краде * /

Отговор: X = пшеница, Y = птица_tit

Изпращане на заявки в раздела Цел:

  1. Съставете база данни "Субекти и учители", съдържаща информация за името на предмета, длъжността и името на учителя, номер на семестъра, докладване.
  2. Създайте заявки към база данни на базата на следното:
  • по какви предмети изпит?
  • какъв предмет и кога чете асистентът по студ?
  • какво отчитане на TOI?
  • кой чете RPP и кога?

домейни a = символ b = целочислени предикати learn (a, a, a, b) vedomost (a, a) клаузи learn (prz, assistent, ivanova, 2). преподавам (toi, docent, morozov, 4). преподавам (mpi, docent, petrova, 5). vedomost (toi, изпит). vedomost (prz, zach). vedomost (mpi, изпит). Цел/* vedomost (X, изпит), запис ("изпит по предмет", X), nl, неуспех. */..., запис (...), nl, неуспех.