dev*_*ium 0 prolog logic-programming
emissionOf(alpha).
emissionOf(beta).
detected(proton), detected(electron) :- emissionOf(alpha), emissionOf(beta).
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,某些(可能是显而易见的)原因Prolog不接受上述代码的最后一行.原因与以下内容有关:
detected(proton), detected(electron)
Run Code Online (Sandbox Code Playgroud)
如果我试试
detected(proton)
Run Code Online (Sandbox Code Playgroud)
它行为正确.
问题是什么?我试图说明,如果同时存在α和β的发射,则存在质子和电子的检测.
谢谢
你是对的,PROLOG中的条款是Horn条款.此外,碰巧在一个条款的头部连接,例如:
detected(proton), detected(electron) :- emissionOf(alpha), emissionOf(beta).
Run Code Online (Sandbox Code Playgroud)
......(这不是Horn条款)实际上等同于以下两个单独的 Horn条款:
detected(proton) :- emissionOf(alpha), emissionOf(beta).
detected(electron) :- emissionOf(alpha), emissionOf(beta).
Run Code Online (Sandbox Code Playgroud)
......因为这两个事实detected(proton),并detected(electron)通过主体目标的结合暗示.
请注意,可能还有其他几种等效方法来编码您希望程序的含义,例如以下(作为示例):
emissionOf(alpha).
emissionOf(beta).
detected(X) :-
emissionOf(alpha),
emissionOf(beta),
(X = proton; X = electron).
Run Code Online (Sandbox Code Playgroud)
执行目标detected(X)将绑定X到atom proton,然后绑定到electron回溯.