Ich möchte einen Typspezifizierer definieren, der eine Liste von Dingen desselben Typs beschreibt. Also ich hätte gerne (list-of integer)
ähnlich wie (array integer)
(was eingebaut ist). Ich kann es für einen bestimmten Typ wie folgt erstellen:
Dies bedeutet jedoch, dass ich dies für jeden möglichen Typ tun muss. Wie kann ich diesen Code so ändern, dass der Typ einen anderen Typ als Argument annimmt und das Prädikat satisfies
im laufenden Betrieb erstellt? Das Problem ist, dass satisfies
ein globales Symbol benötigt, und ich weiß nicht, wie man die Prädikatfunktion im richtigen Kontext definiert (ich denke ich muss gensym
es irgendwie, aber wie?). Außerdem sollte die Lösung funktionieren, damit der Typ in einem anderen Paket erstellt werden kann.
Ich muss gestehen, dass ich nicht genug Lispeln kann, um genau zu verstehen, wofür der DefType verwendet wird, aber dieses Makro sollte es tun ...
%Vor% Zum Beispiel wird (deftype-list-of integer)
so erweitert, dass es dem von Ihnen geposteten Code entspricht.
Dieser Code definiert den Typ im aktuellen Paket (nehme ich an), aber es sollte trivial sein, es zu ändern, um einen Paketnamen zu akzeptieren.
Tags und Links common-lisp