zoukankan      html  css  js  c++  java
  • Scheme的eq? equal? eqv? [转]

    Scheme语言中可以用<,>,<=,>=,= 来判断数字类型值或表达式的关系,如判断变量x是否等于零,它的形式是这样的:(= x 0) ,如x的值为0则表达式的值为#t,否则为#f。

    还有下面的操作:

    (eqv? 34 34)   =>  #t
    (= 34 34)      =>  #t
    

    以上两个form功能相同,说明 eqv? 也可以用于数字的判断。

    在Scheme语言中有三种相等的定义,两个变量正好是同一个对象;两个对象具有相同的值;两个对象具有相同的结构并且结构中的内容相同。除了上面提到的符号判断过程和eqv?外,还有eq?和equal?也是判断是否相等的过程。

    eq?,eqv?,equal?

    eq?,eqv?和equal?是三个判断两个参数是否相等的过程,其中eq?和eqv?的功能基本是相同的,只在不同的Scheme语言中表现不一样。

    eq?是判断两个参数是否指向同一个对象,如果是才返回#t;equal?则是判断两个对象是否具有相同的结构并且结构中的内容是否相同,它用eq?来比较结构中成员的数量;equal?多用来判断点对,列表,向量表,字符串等复合结构数据类型。

    guile> (define v (vector 3 4 5))
    guile> (define w #(3 4 5))  ; w和v都是vector类型,具有相同的值#(3 4 5)
    guile> (eq? v w)
    #f					; 此时w和v是两个对象
    guile> (equal? v w)
    #t                  ; 符合equal?的判断要求
    

    以上操作说明了eq? 和equal? 的不同之处,下面的操作更是证明了这一点:

    guile> (define x (make-vector 5 6))
    guile> x
    #(6 6 6 6 6)
    guile> (eq? x x)    ; 是同一个对象,所以返回#t
    #t
    guile> (define z (make-vector 5 6))
    guile> z
    #(6 6 6 6 6)
    guile> (eq? x z)    ; 不是同一个对象
    #f
    guile> (equal? x z)  ; 结构相同,内容相同,所以返回#t
    #t

    [转] http://os.chinaunix.net/a2003/1130/1057/000001057157.shtml

  • 相关阅读:
    Ubuntu创建VLAN接口配置
    Ubuntu配置网桥方法
    Ubuntu重启网卡的三种方法
    kvm存储池和存储卷
    ubuntu如何切换到root用户
    修改Ubuntu默认apt下载源
    Java之泛型<T> T与T的用法(转载)
    Java关键字(一)——instanceof(转载)-BeanCopier相关
    java代码之美(12)---CollectionUtils工具类(转载)
    Lombok-注解@Slf4j的使用
  • 原文地址:https://www.cnblogs.com/longdouhzt/p/2752640.html
Copyright © 2011-2022 走看看