在Prolog中定义条件
我一直在努力适应Prolog和Horn的条款,但是从形式逻辑的转变仍然感到尴尬和被迫。 我明白,以标准形式提供所有内容是有好处的,但是:
  什么是确定的实质条件操作的最佳方式-->在序言,其中A --> B成功,当任一A = true和B = true OR B = false ?  也就是说, if->then语句在if没有else时为false时不会fail 。 
另外,Horn子句的非显而易见的优势究竟是什么?
在Prolog中定义物质条件操作符 - >的最佳方法是什么?
  当A和B只是变量绑定到原子true和false ,这是很容易: 
cond(false, _).
cond(_, true).
  但总的来说,没有最好的办法,因为Prolog没有提供适当的否定,只有否定,因为失败,这是非单调的。  最接近的实际命题是A和B 
(+ A ; B)
  试图证明A ,然后继续B如果A不能被证明(这并不意味着它由于封闭世界的假设是假的)。 
但是,否定,应在Prolog中小心使用。
另外,Horn子句的非显而易见的优势究竟是什么?
他们有一个简单的程序阅读。 Prolog是一种编程语言,而不是定理证明者。 编写具有明确逻辑意义的程序是可能的,但它们仍然是程序。
  要看到差异,请考虑排序的经典问题。  如果L是一个没有重复的数字列表,那么 
sort(L, S) :-
    permutation(L, S),
    sorted(S).
sorted([]).
sorted([_]).
sorted([X,Y|L]) :-
    X < Y,
    sorted([Y|L]).
  是S按照排序顺序包含L的元素意味着什么的逻辑规范。  然而,它也有一个程序上的含义,即:尝试L所有排列,直到你有一个排序。  这个程序在最坏的情况下贯穿所有的n!  排列,即使排序可以在O(n lg n)时间完成,使其成为一个非常差的排序程序。 
另请参阅此问题。
链接地址: http://www.djcxy.com/p/11477.html