This site is a static rendering of the Trac instance that was used by R7RS-WG1 for its work on R7RS-small (PDF), which was ratified in 2013. For more information, see Home.

Source for ticket #111

cc


    

changetime

2011-01-24 07:06:44

component

WG1 - Core

description

Shall we require `equal?` to return `#t` if `eqv?` does?  This would make it possible to compare potentially circular lists or trees for equality provided they are the same in the sense of `eqv?`.

This is a common implementation hack in many Lisps, but has never been standardized.

id

111

keywords


    

milestone


    

owner

alexshinn

priority

major

reporter

cowan

resolution

wontfix

severity


    

status

closed

summary

Require EQUAL? to return #t if EQV? does

time

2010-12-07 00:05:14

type

defect

Changes

Change at time 2011-01-24 07:06:44

author

cowan

field

comment

newvalue

Correction: WG1 voted to accept this, but it is redundant with its vote on #51.

oldvalue

8

raw-time

1295824004000000

ticket

111

time

2011-01-24 07:06:44

Change at time 2011-01-24 06:55:28

author

cowan

field

comment

newvalue

WG1 voted to take no action.

oldvalue

7

raw-time

1295823328000000

ticket

111

time

2011-01-24 06:55:28

Change at time 2011-01-24 06:55:28

author

cowan

field

resolution

newvalue

wontfix

oldvalue


    

raw-time

1295823328000000

ticket

111

time

2011-01-24 06:55:28

Change at time 2011-01-24 06:55:28

author

cowan

field

status

newvalue

closed

oldvalue

new

raw-time

1295823328000000

ticket

111

time

2011-01-24 06:55:28

Change at time 2010-12-17 16:00:57

author

cowan

field

comment

newvalue

Per #51, we keep the R5RS definition of `equal?`, in which it "may fail to terminate if its arguments are circular data structures".  You seem to be thinking of the R6RS definition, which did not pass WG1.

oldvalue

6

raw-time

1292572857000000

ticket

111

time

2010-12-17 16:00:57

Change at time 2010-12-17 15:55:06

author

arcfide

field

comment

newvalue

Since when is it non-terminating? Wait, I just saw the ticket, I feel like something is seriously wrong here.

oldvalue

5

raw-time

1292572506000000

ticket

111

time

2010-12-17 15:55:06

Change at time 2010-12-17 15:50:12

author

cowan

field

comment

newvalue

The result is ''not'' the same.  Possible non-termination is not the same as being guaranteed to return `#t`.

oldvalue

4

raw-time

1292572212000000

ticket

111

time

2010-12-17 15:50:12

Change at time 2010-12-17 15:40:57

author

arcfide

field

comment

newvalue

The result is the same however. They will return `#t` in either case. It cannot return `#f`.

oldvalue

3

raw-time

1292571657000000

ticket

111

time

2010-12-17 15:40:57

Change at time 2010-12-17 15:33:50

author

cowan

field

comment

newvalue

Yes, it will.  Given two circular lists as arguments, `equal?` will loop on them unless they are `eqv?`, in which case it will return `#t` under this proposal.  In R5RS it may do either.

oldvalue

2

raw-time

1292571230000000

ticket

111

time

2010-12-17 15:33:50

Change at time 2010-12-17 15:25:56

author

arcfide

field

comment

newvalue

It already is defined to use `eqv?` in most cases excepting pairs and vectors, so I do not really see a need to require this. There is no difference whether we require this or not as it won’t change any results.

oldvalue

1

raw-time

1292570756000000

ticket

111

time

2010-12-17 15:25:56