0
votes

PORTABLE POUR UTILISER UNE MAQUILLAGE POUR FAIRE DES CONDITIONS?

en commun LISP, est-il portable d'utiliser instance de marque au lieu de de la condition de la page pour faire des objets de condition?

Par exemple: < PRE> XXX

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? (Subtypep 'Condition' Classe standard) retourne false dans SBCL et Clisp. Cependant, make-instance peut faire des conditions dans les deux implémentations. Est-ce garanti par la norme?


0 commentaires

3 Réponses :


4
votes

Il n'est pas portable, selon la 4ème note de bas de page de la LISP commune pratique Chapitre 19:

"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. "

lien vers la page particulière:

http://www.gigamonkeys.com /book/beyond-exception-Adling-conditions-and-Restarts.html


0 commentaires

3
votes

Non, il est explicitement pas portable pour le faire. Du Spécification :

Le code conforme doit respecter les restrictions suivantes liées aux conditions:

  • définir la condition , pas déficide , doit être utilisé pour définir de nouveaux types de conditions.
  • condition de la condition , pas make-instance , doit être utilisé pour créer des objets de condition explicitement.
  • the : rapport Option de définir-la condition , pas défmethod pour impression-objet , doit être utilisé Définir un journaliste de condition.
  • valide-valide , Slot-limite , Slot-makunbound et avec des emplacements 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 ) doivent être utilisées

0 commentaires

2
votes

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 xxx

mais peut-être en utilisant quelque chose comme: xxx < / PRE>

La norme LISP commune ne nécessite pas d'implémentation à utiliser à proximité de la mise en œuvre Conditions . Ainsi, le système de condition de la norme est défini sans support pour Clos: pas de support pour make-instance requis, aucun support pour la création de sous-classes via déferne requis, ... Ainsi un ne peut pas non plus compter sur d'autres caractéristiques de Clos étant utilisées.

C'est l'un des verrues de la norme commune LISP à partir de 1994.


0 commentaires