useranswer " ". , , . useranswer, : getreply Reply)
, "yes", "" "why". get reply , , ("" "") . , getreply .
, getreply , read write, , . , getreply : getreplyl yes)
"", ; "Answer unknown, try again please" ( , , , ). getreply , , . getreplyt Reply),
.-(Reply - yes, interpret yes (...! Reply = no, interpret!...}
useranswer; Goal, Trace, Answer)
, Goal, Answer. Trace , "why". useranswer , Goal , . "askable" (). , ; askable Goal)
. Goal "askable", , . , , , "why", Trace.
16. 369
Goal , Goal ( , ). - :
useranswer Goal, Trace, Answer):-
askable [ Goal), ask(Goal, Trace, Answer). |
, |
, |
* % Goal? % Goal
|
|
ask(Goal, Trace, Answer):-introduce! Goal), getreply t Reply), process! Reply, Goal, Trace,
Answer).
process( |
Goal, Trace, Answer) |
% ,
%
showtraceC Trace), ask< Goal, Trace, Answer). process! yes, Goal, Trace, Answer) Answer - true, askvars[ Goal) |
i
%
Goal |
% ,
%
i ,
ask(Goal, Trace, Answer). * process) no. Goal, Trace, false). % , Goal
i
introduce! Goal):-
nl, write! Ts it true: '), write 1 Goal), writet?), nl.
askvars { Goal) Goal, :
askvars (Terra):-
var(Term),!, % ?
nl, write! Term), write (' '),
read(Term), I
askvars t Terra):-
Term ■=.. [Functor Args], %
askarglist(Args). I ,
askarglist([)).
askarglist([Term ] Terms]):-
askvars(Term),
askarglist! Terms).
useranswer. , , "askable" eats, . askable[ X eats Y).
, |
Prolog , .
?- useranswert peter eats meat, [], Answer).
% |
Is it true: peter eats meat? *
yes.
true |
Answer
, ,
:
?- -jserar.swer. Who eats What, Is it true: _17 eats _1S?
yes.
_17 = peter. 18 = meat.
[), Answer).
% Prolog %
% ,
II. Prolog
Answer = true
Who = peter
What = meat %
Is it true: _17 eats _18?
yes.
_17 = susan.
_18 = bananas.
Answer = true
Who = susan
What = bananas;
Is it true: eats _18?
no.
Answer = false