【问题标题】:Difference between two set of prolog rules两组序言规则之间的区别
【发布时间】:2013-12-05 18:12:17
【问题描述】:

一般来说,我对序言和逻辑编程有点陌生。谁能告诉我这两组序言规则之间的区别?

  1. number_of_parents(adam,0):-!.
    number_of_parents(eve,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)。

对我来说,它们几乎代表了相同的逻辑集。但是,如果我调用“number_of_parents(eve,2).”,为什么它会返回“yes”?我对其进行了跟踪,但仍然很难弄清楚。非常感谢一步一步的解释。谢谢。

【问题讨论】:

    标签: prolog logic


    【解决方案1】:

    让我们谈谈 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.
    

    很明显,第一组的第三条规则(错误地)使用,而在第二组中,身份被正确表示。

    顺便说一句,代码不错...

    【讨论】:

      猜你喜欢
      • 2015-02-24
      • 2012-02-27
      • 2010-10-06
      • 2018-02-11
      • 1970-01-01
      • 2023-03-22
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多