帮助学习prolog';s条款
我面临的问题是,出于某种(可能是显而易见的)原因,Prolog不接受上述代码的最后一行。原因与:帮助学习prolog';s条款,prolog,logic-programming,Prolog,Logic Programming,我面临的问题是,出于某种(可能是显而易见的)原因,Prolog不接受上述代码的最后一行。原因与: emissionOf(alpha). emissionOf(beta). detected(proton), detected(electron) :- emissionOf(alpha), emissionOf(beta). 如果我试着 detected(proton), detected(electron) 它的行为是正确的 有什么问题?我想说的是,如果既有α和β的发射,那么就有质子和电子
emissionOf(alpha).
emissionOf(beta).
detected(proton), detected(electron) :- emissionOf(alpha), emissionOf(beta).
如果我试着
detected(proton), detected(electron)
它的行为是正确的
有什么问题?我想说的是,如果既有α和β的发射,那么就有质子和电子的探测
感谢大家告诉我的,这是Prolog算法的固有特性。每个陈述的句子都必须是一个。据我所知,它是Prolog算法的固有特性。每个陈述的句子必须是一个。你是正确的,序言中的从句是Horn从句。此外,条款开头的连词,如:
detected(proton)
…(不是Horn条款)实际上相当于以下两个单独的Horn条款:
detected(proton), detected(electron) :- emissionOf(alpha), emissionOf(beta).
…因为身体目标的结合暗示了检测到的事实(质子)和检测到的事实(电子)
请注意,可能有几种其他等效方法来编码您希望程序的含义,例如以下(作为示例):
执行目标
检测(X)
将X
绑定到atomproton
,然后在回溯时绑定到electron
。您是正确的,序言中的子句是Horn子句。此外,条款开头的连词,如:
detected(proton)
…(不是Horn条款)实际上相当于以下两个单独的Horn条款:
detected(proton), detected(electron) :- emissionOf(alpha), emissionOf(beta).
…因为身体目标的结合暗示了检测到的事实(质子)和检测到的事实(电子)
请注意,可能有几种其他等效方法来编码您希望程序的含义,例如以下(作为示例):
执行目标检测到(X)
将X
绑定到原子质子,然后在回溯时绑定到电子。它相当于
emissionOf(alpha).
emissionOf(beta).
detected(X) :-
emissionOf(alpha),
emissionOf(beta),
(X = proton; X = electron).
实际上,您正在尝试重新定义,/2
运算符,这是不允许的。您收到了什么错误消息
你想说什么?如果emissionOf(alpha)
和emissionOf(beta)
为真,则检测到的(质子)
和检测到的(电子)
均为真?在这种情况下,你需要分成两个条款,如@sharky所说:
,(detected(proton),detected(electron)) :- emissionOf(alpha), emissionOf(beta).
这将为您提供两种回溯解决方案。我认为这肯定比他的第二个建议更清楚。相当于
emissionOf(alpha).
emissionOf(beta).
detected(X) :-
emissionOf(alpha),
emissionOf(beta),
(X = proton; X = electron).
实际上,您正在尝试重新定义,/2
运算符,这是不允许的。您收到了什么错误消息
你想说什么?如果emissionOf(alpha)
和emissionOf(beta)
为真,则检测到的(质子)
和检测到的(电子)
均为真?在这种情况下,你需要分成两个条款,如@sharky所说:
,(detected(proton),detected(electron)) :- emissionOf(alpha), emissionOf(beta).
这将为您提供两种回溯解决方案。我认为这肯定比他的第二个建议更清楚