Verwenden von Common Lisp CLOS-Objekten als Schlüssel in einer Hashtabelle?

8

Ich möchte Common Lisp CLOS-Objekte als Schlüssel in einer Hashtabelle verwenden. Ich dachte, es wäre so einfach:

%Vor%

Beim Auschecken der Common Lisp Hyperspec scheint es, dass ich nur eq, eql, equal oder equalp verwenden kann, um die Gleichheit zu testen.

Kann ich das irgendwie? Oder ist das nur eine wirklich stoische Sache, und deshalb lässt der Standard das nicht zu?

    
Andrew McIntosh 07.07.2011, 02:05
quelle

1 Antwort

8

Der Common-Lisp-Standard bietet keinen Mechanismus zur Bereitstellung zusätzlicher Testfunktionen (neben Standard-Funktionen). Sie haben 2 Möglichkeiten:

  1. Verwenden Sie genhash genhash , das eine portable Hash-Tabellen-Implementierung ist (nicht kompatibel mit integrierten)
  2. Verwenden Sie nicht standardmäßige Erweiterungen:
    1. SBCL hat sb-ext:define-hash-table-test function ( Dokumentation )
    2. Clisp hat eine ähnliche Funktion ext:define-hash-table-test ( Dokumentation )
    3. Allegro und Lispworks akzeptieren nicht standardmäßige Werte für :test Argument und haben :hash-function Argument ( Allegro , Lispworks ).
dmitry_vk 07.07.2011 03:15
quelle

Tags und Links