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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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