En F #, l'opérateur d'égalité (=) est généralement extensionnel plutôt qu'intensionnel. C'est génial! Malheureusement, il me semble que F # n'utilise pas l'égalité des pointeurs pour raccourcir ces comparaisons extensionnelles.vérification de l'égalité des raccourcis dans F #?
Par exemple, ce code:
type Z = MT | NMT of Z ref // create a Z: let a = ref MT // make it point to itself: a := NMT a // check to see whether it's equal to itself: printf "a = a: %A\n" (a = a)
... me donne une grande erreur de segmentation de graisse [*], en dépit du fait que 'a' et 'a' à la fois évaluer à la même référence. Ce n'est pas génial. D'autres langages fonctionnels (par exemple PLT Scheme) obtiennent ce droit, en utilisant des comparaisons de pointeurs de manière prudente, pour retourner 'vrai' quand il peut être déterminé en utilisant une comparaison de pointeur. Donc: Je vais accepter le fait que l'opérateur d'égalité de F # n'utilise pas de raccourcis; est-il possible d'effectuer une vérification d'égalité intensionnelle (basée sur un pointeur)? L'opérateur (==) n'est pas défini sur mes types, et j'adorerais que quelqu'un puisse me dire qu'il est disponible d'une manière ou d'une autre.
Ou me dire que je me trompe dans mon analyse de la situation: J'aimerais ça aussi ...
[*] Ce serait probablement un débordement de pile sous Windows; il y a des choses sur Mono que je n'aime pas trop ...
Merci! En aparté: oui, cela fait dump core sur mono/osx. Peut-être que l'appel de queue n'est pas correctement implémenté pour la vérification de l'égalité dans la combinaison particulière de mono/fsharp que j'utilise. –