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

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

adjective(B),time_noun(C).

position_name_group([A,B|S],S):-adjective(A),position_noun(B).

position_name_group([A|S],S):-position_noun(A).   

purpose_name_group([A,B|S],S):-adjective(A),purpose_noun(B).

purpose_name_group([A|S],S):-purpose_noun(A).

action(["в","солнечный","ясный","день","студент","готовил","в",

"читальном","зале","по","учебникам","сложный","экзамен",

"для","успешной","сдачи"]).

verb("готовил").

adjective("солнечный").

adjective("ясный").

adjective("читальном").

adjective("сложный").

adjective("успешной").

instrumental_prep("по").

time_prep("в").

purpose_prep("для").

position_prep("в").

noun("студент").

noun("экзамен").

ins_noun("учебникам").

time_noun("день").

position_noun("зале").

purpose_noun("сдачи").

pronoun("он").

pronoun("она").

pronoun("оно").

qagent("кто").

qeffect("что делал").

qpurpose("для чего").

qposition("где").

qtime("когда").

qobject("что").

qinstrument("как").

otvet(Q,S):-answer(Q,S,A),wr_sp(A),nl.

answer(Q,S,A):-qagent(Q),agent(A,[]),

effect(S,S2),append(S3,S2,S),

append(A,S3,R),action(F),

sublist(R,F).

answer(Q,S,E):-qeffect(Q),effect(E,[]),

agent(S,R),append(A,R,S),

append(A,E,K),

action(F),sublist(K,F).                 

answer(Q,S,I):-qinstrument(Q),instrument(I,[]),

agent(S,S1),effect(S1,S2),

action(F),abc(F,X,S2),

sublist(I,X),abc(X,Y,I),

append(I,S2,K),

sublist(K,F),append(Y,I,X),

sublist(X,F),!.   

answer(Q,S,P):-qposition(Q),position(P,[]),

agent(S,S1),effect(S1,S2),

append(S3,S2,S1),action(F),

abc(F,X,S2),abc(X,Y,S3),

append(Y,G,X),sublist(P,G),

append(S3,P,K),sublist(K,F),!. 

answer(Q,S,T):-qtime(Q),time_action(T,[]),

agent(S,S1),append(S2,S1,S),

action(F),abc(F,T,S2).              

answer(Q,S,P):-qpurpose(Q),purpose(P,[]),

agent(S,S1),effect(S1,S2),

action(F),abc(F,X,S2),

append(X,Y,F),sublist(P,Y),

append(S2,P,K),sublist(K,F).                 

answer(Q,S,O):-qobject(Q),object(O,[]),

agent(S,S1),effect(S1,S2),

action(F),abc(F,X,S2),

append(X,Y,F),sublist(O,Y),

append(S2,O,K),sublist(K,F).

GOAL

nl,nl,nl,

write("вопрос:"),nl,

Q=("кто"),

S=["готовил","экзамен"], write (Q," "),

wr_sp (S),write("?"),nl,

write("ответ:"), nl, otvet(Q,S), nl, readchar(_),

write("Вопрос:"),nl,

R=("что делал"),

SR=["студент","в","читальном","зале"], write (R," "),

wr_sp (SR),write("?"),nl,

write("Ответ:"), nl, otvet(R,SR), nl, readchar(_),

write("Вопрос:"),nl,

U=("когда"),

SU=["студент","готовил","сложный","экзамен"],

write (U," "),  wr_sp (SU),write("?"), nl, write("Ответ:"), nl,

otvet(U,SU), nl, readchar(_),

write("Вопрос:"),nl,

U2=("где"),

SU2=["студент","готовил","экзамен"],

write (U2," "),  wr_sp (SU2),write("?"), nl, write("Ответ:"), nl,

otvet(U2,SU2), nl, readchar(_),

write("Вопрос:"),nl,

W="для чего",

SW=["студент","готовил","экзамен"], write (W," "),

wr_sp (SW),write("?"), nl, write("Ответ:"), nl, otvet(W,SW), nl, readchar(_),

Q2=("что"),

S2=["студент","готовил","по", "учебникам"],

write (Q2," "), wr_sp (S2),write("?"),nl,

write("Ответ:"), nl, otvet(Q2,S2), nl, readchar(_),

Q3=("как"),

S3=["студент","готовил","сложный","экзамен"],

write (Q3," "), wr_sp (S3),write("?"),nl,

write("Ответ:"), nl, otvet(Q3,S3), nl.