Disons que nous avons les éléments suivants Haskell:
data T = T0 | T1 | T2 | ... | TN
toInt :: T -> Int
toInt t = case t of
T0 -> 0
T1 -> 1
T2 -> 2
...
TN -> N
Quel algorithme est utilisé pour effectuer la mise en correspondance du modèle ici? Je vois deux options:
(1) la recherche Linéaire, quelque chose comme
if (t.tag == T0) { ... }
else if (t.tag == T1) { ... }
else ...
(2) la recherche Binaire, ce qui serait raisonnable dans cette tâche spécifique: recherche d' t.tag
dans l'ensemble {TO
...T1023
}. Toutefois, lorsque le pattern matching en général a de nombreuses autres fonctionnalités et des généralisations, ce ne peut pas être utilisé.
La compilation de GHC, quel algorithme est utilisé, et quel est le temps de la complexité en termes de N, pour un patron sur t
en toInt
?