Je voudrais définir un spécificateur de type qui décrit une liste de choses du même type. Donc, je voudrais avoir (list-of integer)
similaire à (array integer)
(qui est intégré). Je suis en mesure de créer pour un type spécifique, comme celui-ci:En Common Lisp, comment définir un spécificateur de type de données générique (comme une liste d'entiers)?
(defun elements-are-integer (seq)
(every #'(lambda (x) (typep x 'integer)) seq))
(deftype list-of-integer()
'(and list (satisfies elements-are-integer)))
Cependant, cela signifie que je dois le faire pour tous les types possibles. Comment puis-je changer ce code pour que le type prenne un autre type en argument, et construire le prédicat satisfies
à la volée? Le problème est que le satisfies
nécessite un symbole global, et je ne sais pas comment définir la fonction de prédicat dans le contexte approprié (je suppose que j'ai besoin de gensym
en quelque sorte, mais comment?). De plus, la solution devrait fonctionner pour que le type puisse être créé dans un autre paquet.
Merci. C'est certainement utile, même si ce n'est pas ce que je voulais exactement. –