gpt4 book ai didi

scheme - 平等的?和记录类型

转载 作者:行者123 更新时间:2023-12-02 17:49:22 24 4
gpt4 key购买 nike

假设我有以下 Scheme (R6RS) 代码:

(define-record-type typeA
(fields
(mutable A)))

我创建了两条记录:

(define X (make-typeA 123))
(define Y (make-typeA 123))

我不明白为什么 (equal? X Y)(equal? (make-typeA 123) (make-typeA 123)) 返回 # f.

我阅读了 R6RS 标准 ( section 11.5 ),但我并没有真正理解它。

最佳答案

来自 R6RS :

The equal? predicate treats pairs and vectors as nodes with outgoing edges, uses string=? to compare strings, uses bytevector=? to compare bytevectors (see library chapter on “Bytevectors”), and uses eqv? to compare other nodes.

换句话说,您对 equal? 的使用实际上只是在做与 eqv? 相同的事情,因为这是为记录指定的方式(请参阅上面的最后一行) .

第 6.1 章有关于 eqv? 记录的内容:

If obj1 and obj2 are both records of the same record type, and are the results of two separate calls to record constructors, then eqv? returns #f.

在您的代码中,这两条记录是对构造函数的两次单独调用的结果。因此它们不能是 eqv?

Scheme 的某些方言可能允许您在记录上使用结构相等。例如,在 Racket 中您可以将记录声明为 #:transparent 以获得结构相等性。我不确定您能否在标准 Scheme 中获得此行为。

关于scheme - 平等的?和记录类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10315506/

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