Секция 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(“Юлия”,”Евгений”) стоит первым и выводится при просмотре тоже первым.