Ich versuche, einige Common Lisp Code in Scheme-Code zu übersetzen. Der Common Lisp-Code hat eine deftype
. Sind deftype
s in Scheme das gleiche wie deftype
s in Common Lisp? Wie übersetzt man eine deftype
in Common Lisp in äquivalenten Code in Scheme?Unterschied zwischen deftyp in Common Lisp und Scheme
Antwort
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.
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.
Denkst du an 'defstruct'? –
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. –