两套prolog规则之间的区别

时间:2013-12-05 18:12:17

标签: prolog logic

我对一般的prolog和逻辑编程有点新意。谁能告诉我这两套prolog规则之间的区别?

  1.   

    number_of_parents(ADAM,0): - !
      number_of_parents(前夕,0): - !
      number_of_parents(X,2)。

  2.   

    number_of_parents2(adam,N): - !,N = 0   number_of_parents2(eve,N): - !,N = 0   number_of_parents2(X,2)。

  3. 对我来说,他们几乎代表了同样的逻辑。但是,如果我称之为“number_of_parents(前夕,2)”,为什么它会返回“是”。我对它做了一些追踪,但我仍然很难搞清楚它。非常感谢一步一步的解释。感谢。

1 个答案:

答案 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漂亮的代码......