gpt4 book ai didi

lisp - 当量值?功能(DrRacket)

转载 作者:太空宇宙 更新时间:2023-11-03 18:52:48 25 4
gpt4 key购买 nike

DrRacket 中的相等函数非常复杂。它们之间存在细微差别,我无法理解。

您能解释为什么这两个结果不同吗?为什么例如 'a' == 'a',但是 "abc"!= "abc"?

(eqv? (integer->char 955) (integer->char 955))
; => true

(eqv? (number->string 955) (number->string 955))
; => false

最佳答案

虽然这两个“(number->string 955)”看起来一样,但它们在内存中返回了两个不同的对象。考虑到这一点,让我们比较一下:

(eq? (number->string 955) (number->string 955))
#f

这是错误的,因为 eq?关心同一性,即:被比较的事物在内存中是否完全是同一个对象。此检查速度很快,但通常不是您想要的。

(eqv? (number->string 955) (number->string 955))
#f

这又是错误的,原因与 eq? -- 这些不是内存中的相同对象。当量值?然而,数字和字符除外:它将按值比较它们,所以两个数字是 eqv?如果它们具有相同的值。这仍然很快,并且通常是您在进行数字相等性测试时想要的。

(equal? (number->string 955) (number->string 955))
#t

现在这是真的。为什么?对象仍然不同,但相等?对字符串(以及其他数据类型也是如此,但我会保持简单)进行异常(exception)处理。什么时候相等?给定字符串,它会按词法比较字符串:因此,如果它们的长度和字符序列相同,则它们是“相等的”。这是您想要的字符串检查。

关于lisp - 当量值?功能(DrRacket),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19719500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com