我想知道Haskell模式匹配是如何在内部解决的以及这如何影响性能。假设我们有一个计算成本很高的函数,因此我们预先计算第一个和/或更频繁使用的值,并在进行实际计算之前对相应的输入进行模式匹配:
expensiveComputation :: Int -> Int
expensiveComputation 1 = 101
expensiveComputation 2 = 3333333
expensiveComputation 3 = 42
...
expensiveComputation n = the actual function
我们可以预先计算很多这样的情况,如果需要的话可以计算数千个,但我们是否需要呢?我认为Haskell实际上需要一些时间来找到匹配输入的模式,因此可能比进行1000次模式匹配更快地计算出第1000个值。
arrayRange
,它将某个输入范围的值存储到一个平坦数组中,并且具有常数时间查找,这基本上就是您在此手动执行的操作。 - luqui