Секции программы

Секция domains-(объявление областей определения).

1 Способ.

имя области = d

где d- любой тип. Например

person=string

nomer=integer

2.Способ.

Имя_списка = d*,

Где d- один из типов или имя области; *- указатель списка.

Например; spisok_celych=integer*

Spisok_bukv=char*

 

3. Способ.

-составная_область=функтор1(d1,d2,…);функтор(d3,d4,…);

где d1,d2,d3,d4,… любой тип.

Objekt=int(integer);str(string)

-mesto=spravo;slevo;

4.Способ.

file=имя1,имя2…

где имя1,имя2 –символические имена файлов.

-file=input_file,output_file

 

Секция predicates (объявление предикатов):

Имя_предиката(d1,d2,…)

Где d1,d2- соответственно области определения агрумента1, аргумента2,… .

Math(person, person)

Otec(person, person).

Секция database (объявление оперативной базы данных):

Синтаксис объявления точно такой же как в секции predicates.

Объявленные здесь предикаты указывают область определения динамической базы данных dbasedom, которая генерируется автоматически. При работе с динамической базой все термы должны соответствовать этой области. Здесь объявленные предикаты не должны быть в секции predicates , но дизъюнкты этих предикатов могут присутствовать в секции clauses.

Секция clauses (дизъюнкты)

Это собственно база данных, где и записываются все дизъюнкты всех предикатов.

.math(“Евдокия”,”Мария”).

.math(“Юля”,Syn):-Syn=”»Евгений”;Syn=”Игнатий”.

Секция goal (цель)

Здесь указывается вопрос, на который должен ответить ТП. Записывается он как дизъюнкт без головы и знака “:-”. Если в пользовательской программе нет цели (нет goal), то перед выполнением программы цель запрашивается.

 

Программа родственных отношений выглядит так:

domainsperson=stringpredicates /*предикаты*/

math(person,person) /*мать */

swekrow(person,person) /*свекровь*/

otec(person,person) /* отец */

djadja(person,person) /* дядя */

wopros /*вопрос */

clauses

math ("Евдокия","Мария").

math ("Юлия","Евгений").

math ("Юлия","Игнатий").

otec ("Евгений","Мария").

djadja ("Игнатий","Мария").

swekrow ("Юлия","Евдокия").

wopros:-math(Math,"Мария"),

swekrow(Swekrow,Math),

math (Swekrow,Gost),

write ("возможный гость ",Gost),

nl,

fail. /*вывод всех решений*/

wopros:-write(">нет решений") /*нет решения*/

goal

makewindow(1,74,7," рабочее окно",16,0,8,80),

wopros.

 

Предикат wоpros ( без аргументов) формирует высказывание:

 

Возможный гость “Евгений”

Возможный гость “Игнатий”

No solutin нет решений

 

В базе данных факт math(“Юлия”,”Евгений”) стоит первым и выводится при просмотре тоже первым.