2010-12-07 45 views

Répondre

5

Comme par R5RS, les spécifications minimales pour une mise en œuvre de eqv? (lorsqu'il est passé deux arguments obj1 et obj2) pour évaluer à #t sont:

  • obj1 et obj2 sont tous les deux ou les deux #t#f. (comment deux littéraux booléens évaluent la même valeur dépend de l'implémentation).
  • obj1 et obj2 sont tous deux des symboles et

(string=? (symbol->string obj1) (symbol->string obj2)) =) => #t

  • obj1 et obj2 sont tous deux des nombres, sont numériquement égales (=), et sont soit à la fois exact ou inexact à la fois.
  • obj1 et obj2 sont les deux caractères et sont le même caractère selon la procédure char=?.
  • les deux obj1 et obj2 sont la liste vide.
  • obj1 et obj2 sont des paires, des vecteurs ou des chaînes qui indiquent les mêmes emplacements dans le magasin (voir la section 3.4 de R5RS).
  • obj1 et obj2 sont des procédures dont les balises emplacement sont égaux (A expression lambda est conceptuellement étiqueté avec un emplacement de stockage. Cela signifie varie entre les implémentations Scheme. Voir également la section 4.1.4 de r5rs).

equal? pourrait être mis en œuvre en termes de eqv? qu'il compare récursive le contenu des paires, des vecteurs et des chaînes, l'application eqv? sur d'autres objets tels que des chiffres et des symboles.

+0

Merci. C'est exactement ce que je cherchais. –