Je n'ai vu que l'opérateur de spatinage Perl (<=>) utilisé dans les routines de tri numériques. Mais cela semble utile dans d'autres situations. Je ne peux tout simplement pas penser à une utilisation pratique. P>
Quel serait un exemple de quand il pourrait être utilisé en dehors d'un tri perl? p>
Ceci est une question de meilleure pratique. SUB> P>
3 Réponses :
dans n'importe quelle méthode de comparaison. Par exemple, vous pouvez avoir un objet compliqué, mais il a toujours un "ordre" défini, vous pouvez donc définir une fonction de comparaison pour elle (que vous ne avez pas em> à utiliser dans une méthode de tri, Bien que ce soit pratique): use List::Util qw(sum);
# $result will be
# -1 if value is lower than the median of @setOfValues,
# 1 if value is higher than the median of @setOfValues,
# 0 if value is equal to the median
my $result = sum(map { $value <=> $_ } @setOfValues);
En fait, le comportement code> Undef code> peut causer des problèmes, car undef code> dans une sorte entraînera la mort de Perl. Mais nous pouvons faire un tri numérique qui gère Nan's:
sous numérique {$ A <=> $ B // ($ A == $ a) - ($ b == $ b)} code> ceci Trier les Nan au début, qui a l'effet positif du moins ne meurt pas.
J'écris un système de contrôle pour Robot Joe qui veut aller à Robot Mary et la recharger. Ils se déplacent le long des points entier sur la ligne. Joe commence à $ J et peut marcher 1 mètre dans n'importe quelle direction par unité de temps. Mary se tient toujours à $ M et ne peut pas bouger - elle a besoin d'une bonne recharge! Le programme de contrôle ressemblerait à ce que:
Étant donné à quel point il est étonnamment difficile, c'est de correctement i> mettre en œuvre une recherche binaire, je ne peux qu'espérer que je n'ai pas contribué à un autre exemple brisé au monde. : P
Quel est l'intérêt de la performance de la délégation de ces deux comparaisons d'énoncés explicitement écrits aux préprocessionnaires internes?
Au niveau de la bytecode, il y a un opérateur, pas deux: perl -mo = TERSE -E "$ A <=> $ b" code> qui dit, car Perl est implémenté dans C (qui n'a pas de Opérateur de comparaison à trois voies) Le
<=> code> doit être implémenté comme deux comparaisons par les internes. Toute prestation de performance serait que l'expansion se produit dans C plutôt que de Perl. Bien entendu, finalement, la limite est ce que l'instruction du processeur prend en charge indépendamment de ce que les opérateurs C a.
@ETher: Seulement l'étiquette "opérateur"? Je pensais que vous avez aimé créer de nouveaux tags de l'opérateur!