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>, pasdéficide code>, doit être utilisé pour définir de nouveaux types de conditions. LI>condition de la condition code>, pasmake-instance code>, doit être utilisé pour créer des objets de condition explicitement. Li>- the
: rapport code> Option dedéfinir-la condition code>, pasdéfmethod code> pourimpression-objet code>, doit être utilisé Définir un journaliste de condition. LI>valide-valide code>,Slot-limite code>,Slot-makunbound code> etavec 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 pardé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>