Prolog代码中询问用户的问题出现错误 [已编辑]

我是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.

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注