In Common Lisp, wie definiert man einen generischen Datentyp-Spezifizierer (wie eine Liste von ganzen Zahlen)?

8

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:

%Vor%

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.

    
J S 09.07.2010, 06:00
quelle

2 Antworten

12

Versuchen Sie Folgendes:

%Vor%     
WReach 08.01.2011 06:57
quelle
-1

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.

    
6502 09.07.2010 08:40
quelle

Tags und Links