У меня есть две функции, определенные в куске кода haskell:
lengthwtilde [] = 0
lengthwtilde ~(_:xs) = 1 + lengthwtilde xs
lengthwotilde [] = 0
lengthwotilde (_:xs) = 1 + lengthwotilde xs
Когда я тестирую их оба в ghci (используя :set +s
), я обнаружил, что lengthwtilde
(тот, у которого тильда перед совпадением шаблона) выполняет значительно медленнее, чем lengthwotilde
примерно на три секунды.
*Main> lengthwtilde [1..10000000]
10000000
(19.40 secs, 1731107132 bytes)
*Main> lengthwotilde [1..10000000]
10000000
(16.45 secs, 1531241716 bytes)
Почему это?