我是Prolog语言的新手,我想实现4条规则,它们是:
规则1:如果环境是论文,或者环境是手册,或者环境是文件,或者环境是教科书,那么刺激情况是口头的。
规则2:如果环境是图片,或者环境是插图,或者环境是照片,或者环境是图表,那么刺激情况是视觉的。
规则3:如果环境是机器,或者环境是建筑,或者环境是工具,那么刺激情况是物理对象。
规则4:如果环境是数字,或者环境是公式,或者环境是计算机程序,那么刺激情况是符号的。
我需要在Prolog中编程的系统是:当输入go.时,系统会要求用户输入环境,如果输入的文本是其中一个环境,系统应该输出相应的刺激情况。
所以,我尝试编写这段代码,但它不起作用,我不知道为什么,如果你能帮我解决这个问题,我将不胜感激。
go:- check(Env), write('环境是:'),write(Env),nl,undo.
check(verbal):- verbal,!.
check(visual):- visual,!.
verbal :- verify(environment).
visual :- verify(pictures).
ask(Question) :-
write('环境是什么?'),
write(Question), write('? '),
read(Response), nl,
( (Response == papers ; Response == manuals ; Response == manuals; Response == textbook)
-> assert(yes(Question)) ;
assert(no(Question)), fail).
:- dynamic yes/1,no/1.
verify(S) :- (yes(S) -> true ; (no(S) -> fail ; ask(S))).
我只为前两条规则编写了代码以进行尝试,但它们不起作用。
提前感谢。
回答:
根据你的评论,我理解你可以这样写:
go:- ask("环境是什么",Response), check(Response,Result),write('刺激情况:'),write(Result).
verify(X,Y) :- yes(X,Y) -> true.
check(X,Y):- verify(X,Y),!.
ask(Question,Response) :-
write(Question), write('? '),
read(Response), nl,
( (Response == papers ; Response == manuals ; Response == manuals; Response == textbook)
-> assert(yes(Response,verbal)) ;
(Response==machines)->assert(yes(Response,object))).
:- dynamic yes/2.
示例:
?- go.
环境是什么? textbook.
刺激情况:verbal
true.
?- go.
环境是什么? machines.
刺激情况:object
true.