Лабораторная работа 5. Изучение приемов семантического анализа предложений естественного языка посредством падежной грамматики, страница 2

Студент                                    Сложный экзамен            с помощью чего       по учебникам кем(агент)                                                        инструмент

для чего(цель)                          когда(время)

                               

где

(место)

Успешной сдачи                      читальный зал               солнечный ясный день  

Запросы

Кто  готовил экзамен

Студент

Что делал студент в читальном зале

Готовил

Когда студент готовил сложный экзамен

В солнечный ясный день

Где студент готовил экзамен

В читальном зале

Для чего студент готовил экзамен

Для успешной сдачи

Что готовил студент по учебникам

Сложный экзамен

По чему студент готовил  сложный экзамен

По учебникам

Текст программы

DOMAINS

list=string*

PREDICATES

sentence(list,list)

agent(list,list)

effect(list,list)

object(list,list)

instrument(list,list)

purpose(list,list)

position(list,list)

time_action(list,list)

time_prep(string)

purpose_prep(string)

position_prep(string)

instrumental_prep(string)

time_name_group(list,list)

ins_name_group(list,list)

purpose_name_group(list,list)

position_name_group(list,list)

verb(string)

pronoun(string)

verb_group(list,list)

name_group(list,list)

noun(string)

adjective(string)

purpose_noun(string)

position_noun(string)

ins_noun(string)

time_noun(string)

sublist(list,list)

prefix(list,list)

suffix(list,list)

append(list,list,list)

action(list)

answer(string,list,list)

qagent(string)

qeffect(string)

qpurpose(string)

qposition(string)

qtime(string)

qobject(string)

qinstrument(string)

abc(list,list,list)

wr_sp(list)

otvet(string,list)

CLAUSES

abc([X|L],[],[X|L3]).

abc([C|L],[C|L2],[X|L3]):-abc(L,L2,[X|L3]).

sublist(Sub,List):- prefix(Pre,List), suffix(Sub,Pre).

sublist(Sub,List):- suffix(Suf,List), prefix(Sub,Suf). 

prefix([],X).

prefix([X|List],[X|List1]):-prefix(List,List1).

suffix(List,List).

suffix(X,[Y|List]):-suffix(X,List).

% конкатенация списков

append([],L,L).

append([N|L1],L2,[N|L3]) :-  append(L1,L2,L3).

wr_sp([]).

wr_sp([X|S]) :- write(X," "),wr_sp(S).

sentence(S,S0):-agent(S,S1), effect(S1,S2),

object(S2,S0).

sentence(S,S0):-agent(S,S1), effect(S1,S2),

instrument(S2,S3), object(S3,S0).

sentence(S,S0):-agent(S,S1), effect(S1,S2),

position(S2,S3),instrument(S3,S4),

object(S4,S0).

sentence(S,S0):- time_action(S,S1),agent(S1,S2),

effect(S2,S3), position(S3,S4),

instrument(S4,S5), object(S5,S0).

sentence(S,S0):- time_action(S,S1),agent(S1,S2),

effect(S2,S3), position(S3,S4),

instrument(S4,S5), object(S5,S6),

purpose(S6,S0).

sentence(S,S0):- time_action(S,S1),agent(S1,S2),

effect(S2,S3), instrument(S3,S4),

object (S4,S0).

sentence(S,S0):-agent(S,S1), effect(S1,S2),

instrument(S2,S3), object(S3,S4),

purpose(S4,S0).

sentence(S,S0):- time_action(S,S1),agent(S1,S2),

effect(S2,S3),position(S3,S4),

object(S4,S5),purpose(S5,S0).

sentence(S,S0):- time_action(S,S1),agent(S1,S2),

effect(S2,S3), object(S3,S4),

purpose(S4,S0).

agent([X|S0],S0):-pronoun(X).

agent(S,S0):-name_group(S,S0).

agent([X|S0],S0):-noun(X).       

effect(S,S0):-verb_group(S,S0).

effect([X|S0],S0):-verb(X).

object(S,S0):-name_group(S,S0).

object([X|S0],S0):-pronoun(X).

instrument([X|S],S0):-instrumental_prep(X),

ins_name_group(S,S0).

instrument(S,S0):-ins_name_group(S,S0).

time_action([X|S],S0):-time_prep(X),time_name_group(S,S0).

time_action(S,S0):-time_name_group(S,S0).

position([X|S],S0):-position_prep(X),

position_name_group(S,S0).

position(S,S0):-position_name_group(S,S0).

purpose([X|S],S0):-purpose_prep(X),

purpose_name_group(S,S0).

purpose(S,S0):-purpose_name_group(S,S0).

name_group([A,B|S],S):-adjective(A),noun(B).

name_group([A|S],S):-noun(A).

verb_group([A,B|S],S):-adjective(A),verb(B).

verb_group([A|S],S):-verb(A).

ins_name_group([A,B|S],S):-adjective(A),ins_noun(B).

ins_name_group([A|S],S):-ins_noun(A).

time_name_group([A,B|S],S):-adjective(A),time_noun(B).

time_name_group([A|S],S):-time_noun(A).