【发布时间】:2018-01-22 07:30:37
【问题描述】:
无火无烟,无烟无火。
用 Prolog 程序识别上述语句的结论和条件。在答案中,结论一定是有火就有烟,有烟就一定有火。
我该怎么做?
请解释答案。
【问题讨论】:
-
改写:有火如果有烟。顺便说一句,你的问题的标题对我来说毫无意义。
标签: prolog artificial-intelligence discrete-mathematics first-order-logic
无火无烟,无烟无火。
用 Prolog 程序识别上述语句的结论和条件。在答案中,结论一定是有火就有烟,有烟就一定有火。
我该怎么做?
请解释答案。
【问题讨论】:
标签: prolog artificial-intelligence discrete-mathematics first-order-logic
两者都是可能的,因为有人可能会争辩说,没有火就不可能有烟,没有烟就不可能有火。
但是在没有关于火和烟的先验知识的情况下,你只能得出结论,只有在有火的情况下才会有烟。所以烟雾是条件,因为“如果你看到烟雾(条件)”你“知道有火(结论)”。但是,如果您知道有火,则仅给出这句话,您不能确定有烟。
【讨论】:
我假设这个问题是关于如何根据有关某些原子的其他已知事实来创建暗示事实为真的合理规则。如果位置“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,因此如果给定事实的火或烟为真,它将返回真。
【讨论】:
fire(asbestos) 时收到false.。但查询 fire(a) 也需要中止,通过输入 ; 枚举解决方案将重复 true 而不会结束。
isFire(X) :- fire(X);smoke(X). isSmoke(X) :- smoke(X);fire(X).