【发布时间】:2020-07-03 15:40:39
【问题描述】:
我对 prolog 非常不熟悉,但我在学校项目中需要它。因此,如果我使用不清楚的语言或不正确的术语,请谅解。我的麻烦是我的代码根本没有按我的预期工作。这是我在知识库中的一些代码:
output(mn,hp,hp,hp).
output(hn,mn,hp,lp).
output(ln,hp,mp,hp).
input(lp,mp,mp,lp):-output(hn,mn,hp,lp).
这是我的查询:
?- input(X,mp,mp,lp),output(hn,mn,hp,lp).
我希望它返回 X = lp,就像知识库中的 if-then 语句一样。但是,它返回X=hp、X=mp 和X=lp,这不是我想要的。
我使用“trace”来查看它是如何推理的,并且我看到它需要其他输出。我认为“,”运算符的意思是“和”,因此它只会查找具有值(hn、mn、hp、lp)的输出。如何让我的代码只查找具有正确输出值的 if-then 语句?是我对“,”运算符的理解有误,还是因为我的知识库问题?
编辑:这是我在 SWISH 中的代码的链接:https://swish.swi-prolog.org/p/i%20wanna%20bash%20my%20head%20in.pl#&togetherjs=AQ4zzkAQk4
编辑 2:我对这个项目的目标如下:我试图用这个程序解释一个模糊的认知图。我希望程序在给定输出概念的情况下确定缺失输入概念的值。因此,我需要程序在 output() 中查找具有正确值的子句,然后确定相关 input() 中的值。
【问题讨论】:
-
既然你被添加了 [swi-prolog-for-sharing] 标签,你是在 SWISH 中这样做的吗?你能链接到你的程序吗?我在swish.swi-prolog.org/p/QlAbitSc.pl 重建了它,它的行为与您预期的一样。我没有看到您看到的多个错误答案。
-
@IsabelleNewbie 您好,感谢您的回答!我确实在 SWISH 中这样做。这是链接,希望它有效。 swish.swi-prolog.org/p/… 我认为我有大量的 if-then 语句是问题所在,但我不能确定。
-
当我运行 您问题中的代码时,我确实得到了
X = lp.。请在您的问题中包含您的问题的minimal reproducible example - 请不要链接到外部网站。
标签: prolog