在Prolog中创建含义,其中A暗示B和B暗示A,通过通用规则

时间:2018-01-22 07:30:38

标签: prolog artificial-intelligence discrete-mathematics first-order-logic

  

没有火没有烟,没有烟没有火。

使用Prolog程序从上述声明中确定结论和条件。在答案中,结论必须是如果有火,就有烟,如果有烟,就必须有火。

我该怎么做?

请解释答案。

2 个答案:

答案 0 :(得分:2)

两者都是可能的,因为有人可能会争辩说,没有火就不能吸烟,而且没有烟就不能开火。

但是如果没有关于火和烟的先验知识的句子,你只能得出结论:只有在有火的情况下才能吸烟。所以烟雾就是条件,因为" 如果你看到烟雾(状况)"你知道有火(结论)"。但如果你知道有火就只给你一句话你就不能确定有烟。

答案 1 :(得分:0)

我假设这个问题是关于如何根据已知某些原子的其他事实来创造合理的规则,暗示事实是真实的。如果位置'a'正在吸烟,则必须在'a'位置发生火灾,因此'a'有火。

smoke(a).
smoke(b).
fire(c).

fire(X) :- smoke(X).
smoke(X) :- fire(X).

?- fire(a).
true

?- fire(b).
true

?- fire(c).
true

?- smoke(c).
true

如果您想特别检查某些东西是否着火或吸烟:

isFire(X) :- fire(X);smoke(X).
isSmoke(X) :- smoke(X);fire(X).

示例:

?- isFire(asbestos), smoke(asbestos).
false <- the first statement is never true so the second never gets called

;符号表示OR,因此如果某个事实的火或烟是真的,它将返回true。