guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Equality and hashing for new datatypes


From: Taylan Kammer
Subject: Re: Equality and hashing for new datatypes
Date: Fri, 23 Jun 2023 09:09:20 +0200
User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0

On 23.06.2023 00:45, Philip McGrath wrote:
> On Thursday, June 22, 2023 7:33:06 AM EDT Taylan Kammer wrote:
>> On 22.06.2023 00:25, Philip McGrath wrote:
>>> Hi,
>>>
>>> What is the recommended way for a library to customize `equal?` and
>>> `equal?` -based hashing for new datatypes it defines?
>>>
>>> I know from [1] that `equal?` can be customized using GOOPS; however, some
>>> projects do not use GOOPS (e.g. [2]), so it would seem more friendly for a
>>> generic library to avoid it. Also, it is not clear if the same mechanism
>>> is
>>> even an option for customizing `equal-hash` to match `equal?`.
>>>
>>> I'm looking for something like Racket's `gen:equal+hash` [3] or Chez
>>> Scheme's `record-equal-procedure` and `record-hash-procedure` [4].
>>>
>>> This came up while I was working on a portable version of the immutable
>>> hash-table implementations from Racket-on-Chez.
>>>
>>> -Philip
>>>
>>> [1]:
>>> https://www.gnu.org/software/guile/manual/html_node/GOOPS-Object-Miscella
>>> ny.html [2]:
>>> https://lists.gnu.org/archive/html/info-gnu/2023-05/msg00005.html [3]:
>>> https://docs.racket-lang.org/reference/Equality.html#%28part._.Implementi
>>> ng_.Equality_for_.Custom_.Types%29 [4]:
>>> https://cisco.github.io/ChezScheme/csug9.5/objects.html#./objects:h14
>> Hi Philip,
>>
>> You can use SRFI 69 hash tables in Guile.  This library offers a way to
>> specify the equality and hash procedures that should be used by a hash
>> table, e.g.:
>>
>> [...]
>>
>> Note that this doesn't affect the behavior of the standard 'equal?'
>> procedure, it only affects the SRFI 69 hash table operations on the created
>> hash table.
>>
>> I currently don't remember whether Guile's own non-portable hash table
>> library supports the same feature.  It probably does in some way.
>>
> 
> Thanks, but this is the opposite of what I want to do. The library I'm 
> porting 
> already supports creating tables with custom equality and hashing functions. 
> What I'm trying to do is make the standard `equal?` procedure recognize when 
> two of my table values are semantically the same even if internal 
> implementation details differ.
> 
> (Note also that SRFI 69 and other libraries provide *mutable* hash tables. 
> The 
> Racket-on-Chez library I'm porting provides immutable hash tables, more 
> properly Hash Array Mapped Tries, as made famous by Clojure.)
> 
> -Philip

Ah, apologies then.  As far as I know, there's no other way to do that in Guile
than with GOOPS, which you've already mentioned.

In standard Scheme there's no way to do it at all.  I don't think there's even
an SRFI for it (I just searched a bit, out of curiosity, couldn't find 
anything).

-- 
Taylan




reply via email to

[Prev in Thread] Current Thread [Next in Thread]