en commun LISP, est-il portable d'utiliser Par exemple: P> < PRE> XXX PRE> Est-ce que cela a quelque chose à voir avec la manière dont les conditions sont placées dans la hiérarchie de la classe de fermeture? instance de marque code> au lieu de
de la condition de la page code> pour faire des objets de condition?
(Subtypep 'Condition' Classe standard) code> retourne false dans SBCL et Clisp. Cependant,
make-instance code> peut faire des conditions dans les deux implémentations. Est-ce garanti par la norme? P> p>
3 Réponses :
Il n'est pas portable, selon la 4ème note de bas de page de la LISP commune pratique Chapitre 19: P>
"Dans certaines implémentations courantes du LISP, les conditions sont définies comme sous-classes d'objet standard, auquel cas la valeur de la fente, la note-instance et l'instance d'initialisation fonctionnera, mais il n'est pas portable de s'appuyer sur elle. " em> p>
lien vers la page particulière: p>
http://www.gigamonkeys.com /book/beyond-exception-Adling-conditions-and-Restarts.html P>
Non, il est explicitement pas portable pour le faire. Du Spécification : P>
Le code conforme doit respecter les restrictions suivantes liées aux conditions: P>
définir la condition code>, pas
déficide code>, doit être utilisé pour définir de nouveaux types de conditions. LI>
condition de la condition code>, pas
make-instance code>, doit être utilisé pour créer des objets de condition explicitement. Li>
- the
: rapport code> Option de
définir-la condition code>, pas
défmethod code> pour
impression-objet code>, doit être utilisé Définir un journaliste de condition. LI>
valide-valide code>,
Slot-limite code>,
Slot-makunbound code> et
avec des emplacements code> ne doit pas être utilisé sur les objets de condition. Au lieu de cela, les fonctions d'accesseur appropriées (définies par
définir-la condition code>) doivent être utilisées li> ul> blockQuote>
Vous pouvez vérifier si le système de condition dans une certaine implémentation utilise des opérations closes de fermeture et de support non par mais peut-être en utilisant quelque chose comme: p> La norme LISP commune ne nécessite pas d'implémentation à utiliser à proximité de la mise en œuvre Conditions EM>. Ainsi, le système de condition de la norme est défini sans support pour Clos: pas de support pour C'est l'un des verrues em> de la norme commune LISP à partir de 1994. P> P> make-instance code> requis, aucun support pour la création de sous-classes via
déferne code> requis, ... Ainsi un ne peut pas non plus compter sur d'autres caractéristiques de Clos étant utilisées. P>