我对一般的prolog和逻辑编程有点新意。谁能告诉我这两套prolog规则之间的区别?
number_of_parents(ADAM,0): - !
number_of_parents(前夕,0): - !
number_of_parents(X,2)。
number_of_parents2(adam,N): - !,N = 0 number_of_parents2(eve,N): - !,N = 0 number_of_parents2(X,2)。
对我来说,他们几乎代表了同样的逻辑。但是,如果我称之为“number_of_parents(前夕,2)”,为什么它会返回“是”。我对它做了一些追踪,但我仍然很难搞清楚它。非常感谢一步一步的解释。感谢。
答案 0 :(得分:0)
让我们谈谈Prolog:
9 ?- [stackoverflow].
Warning: /home/carlo/prolog/stackoverflow.pl:8:
Singleton variables: [X]
Warning: /home/carlo/prolog/stackoverflow.pl:12:
Singleton variables: [X]
% stackoverflow compiled into stackoverflow 0.01 sec, 4 clauses
true.
10 ?- leash(-all),trace.
true.
[trace] 11 ?- number_of_parents(eve,2).
Call: (6) stackoverflow:number_of_parents(eve, 2)
Exit: (6) stackoverflow:number_of_parents(eve, 2)
true.
[trace] 12 ?- number_of_parents2(eve,2).
Call: (6) stackoverflow:number_of_parents2(eve, 2)
Call: (7) 2=0
Fail: (7) 2=0
Fail: (6) stackoverflow:number_of_parents2(eve, 2)
false.
很明显,第一组的第三条规则是(错误的)参与,而在第二组中,身份的正确表示。
BTW漂亮的代码......