【发布时间】:2012-01-27 00:12:08
【问题描述】:
假设我们有以下 Haskell:
data T = T0 | T1 | T2 | ... | TN
toInt :: T -> Int
toInt t = case t of
T0 -> 0
T1 -> 1
T2 -> 2
...
TN -> N
这里使用什么算法来执行模式匹配?我看到两个选项:
(1) 线性搜索,类似
if (t.tag == T0) { ... }
else if (t.tag == T1) { ... }
else ...
(2) 二分搜索,这在这个特定任务中是明智的:在集合 {TO...T1023} 中搜索t.tag。但是,如果模式匹配通常具有许多其他功能和泛化,则可能不会使用它。
用 GHC 编译,使用什么算法,时间复杂度是多少,以 N 表示,在 t 上进行模式匹配 toInt?
【问题讨论】:
标签: haskell compiler-construction pattern-matching complexity-theory