2013-12-05 4 views
0

Я вроде как новичок в прологе и логическом программировании в целом. Может ли кто-нибудь сказать мне разницу между этими двумя наборами правил пролога?Разница между двумя наборами правил пролога

  1. number_of_parents (адам, 0): - !.
    number_of_parents (канун, 0): - !.
    number_of_parents (X, 2).

  2. number_of_parents2 (адам, N): - !, N = 0.
    number_of_parents2 (eve, N): - !, N = 0.
    номер_of_parents2 (X, 2).

Для меня они в значительной степени представляют собой один и тот же набор логики. Но почему он возвращает «да», если я назову «number_of_parents (eve, 2)»?? Я сделал след, но мне все еще сложно понять это. Пошаговое объяснение очень ценится. Благодарю.

ответ

0

давайте говорить Пролог:

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 хороший код ...

Смежные вопросы