2009-08-07 5 views

Antwort

1

Common Lisp deftype hat kein genaues Scheme-Äquivalent. Sie müssen die Typdefinitionen von Hand übersetzen oder ein deftype Makro schreiben, in Bezug auf welche Scheme-Record-Bibliothek in Ihrem System verfügbar ist.

Bare Scheme hat keine benutzerdefinierten Typen. In einem R5RS-System müssen Sie die relevanten SRFIs nachschlagen (z. B. SRFI-9 (Record types), SRFI-57 Records, SRFI-99 ERR5RS records) und außerdem sehen, welche SRFIs und Spracherweiterungen Ihr bestimmtes Scheme-System implementiert. Schema-Systeme sind im Allgemeinen nicht sehr konsistent in ihren Implementierungen von irgendetwas, das über den minimalen Schema-Standard hinausgeht. R6RS-Schema enthält Datensätze in its standard library.

+1

Denkst du an 'defstruct'? –

+0

Ich habe nicht an etwas Bestimmtes gedacht. Wenn Sie nur einfache Datensatztypen benötigen, können Sie in einer halben Stunde ein Makro für Array-basierte Datensätze zusammenstellen. –

3

Wie Anton sagt, gibt es kein genaues Schemeäquivalent zu Common Lisp deftype. Eine Beschreibung, was ein Typspezifizierer in Common Lisp sein kann, finden Sie unter CLHS:Type Specifiers. Diese werden in Deklarationen, Array-Typspezifikationen, Struct- und CLOS-Slot-Spezifikationen, generischen Funktionsargument-Spezialisierungen und on und on verwendet. Es wird eine gewaltige Herausforderung sein, dies dem Scheme zu übertragen. Ihre beste Hoffnung ist, dass die von deftype definierten Typen nur trivial (oder gar nicht!) Verwendet werden.