• Learn Prolog Now 翻译


    内容提要

    • 判断两个语句是否相等
    • 判断两个语句是否不等

    判断两个语句是否相等

    Prolog中有一个用于判断两个语句是否相等的重要谓词,即==/2。这个谓词可以用来判断两个语句是否相等,但是不能用于初始化变量,所以这一点是和谓词=/2有所区别的。让我们来看一些具体的例子:

    ?- a == a.
    true
    
    ?- a == b.
    false
    
    ?- a == 'a'
    true
    

    Prolog回答上面查询的答案的原因是很明确的,但是特别提一下最后一个查询,因为a和'a'在Prolog中被认为是同一个原子。

    接下来,我们看一些包含了变量的例子,也可以明确比较谓词==/2和合一谓词=/2的不同:

    ?- X == Y.
    false
    
    ?- X = Y.
    X = _2808
    Y = _2808
    true
    

    在上面的查询中,X和Y都是没有初始化的变量,我们没有给它们任何值。所以这一个查询结果是正确的:因为X和Y不是相同的对象,所以==验证返回false。另一方面,使用=可以成功,因为X和Y能够合一。

    让我们继续看包含了初始化值的变量的查询:

    ?- a = X, a == X.
    X = a
    true
    

    查询的第一个部分,a=X,将X和a合一,X就被初始化为a。所以当a == X运算时,左右两边都是相同的Prolog对象,所以检查通过。

    类似的情况也发生在下面的查询中:

    ?- X = Y, X == Y.
    X = _4500
    Y = _4500
    true
    

    查询的第一个子句,X = Y,将变量X和Y合一,它们共享同一个Prolog对象,然后使用 X == Y检查是否相等,就能够成功。

    可以看出,=和是明确不同的,尽管如此,它们之间有一个重要的关联:可以看作是比=更强的验证两个语句相等的方式,因为,如果term1和term2都是Prolog的语句,并且查询 term1 == term2能够成功,那么查询 term1 = term2也必然能够成功。

    判断两个语句是否不等

    另外一个值得一提的谓词是:==,这个谓词的作用和正好相反,当失败时成功。即,当两个语句不相等时,==返回为真,看例子:

    ?- a == a.
    false
    
    ?- a == b.
    true
    
    ?- a == 'a'
    false
    

    上面的查询及其结果都很好理解:这些都是使用==的相反结果。思考下一个例子:

    ?- X == a.
    X = _3719
    true
    

    为什么会有这样的答案?我们知道之前查询 X == a 是 false,所以查询 X == a 是 true,Prolog也确实是这样运行的。

    类似地:

    ?- X == Y.
    X = _798
    Y = _799
    true
    

    同样地,我们知道之前查询 X == Y失败了,所以查询 X == Y就能够成功。

  • 相关阅读:
    Beginning Auto Layout Tutorial in iOS 7: Part 2
    Beginning Auto Layout Tutorial in iOS 7: Part 1
    Autolayout 03
    Autolayout 02
    Autolayout 01
    Start Developing iOS Apps Today
    Spring 7大功能模块的作用
    struts2入门
    myeclipse导入工程 Some projects cannot be imported because they already exist in the workspace
    第十一章 Servlet MVC模式
  • 原文地址:https://www.cnblogs.com/seaman-h-zhang/p/4670419.html
Copyright © 2020-2023  润新知