
On Friday 04 April 2014, 13:51:42, Dimitri DeFigueiredo wrote:
I think that in the second case (ulast' in your test) still performs 2 checks per iteration as it has to check for the empty list on its second argument at every recursive call (that's how it knows it's done). So, we are performing the same number of iterations.
But in each iteration, there is only one case, versus the two in the plast version, we have ulast' y ys = case ys of [] -> y z:zs -> ulast' z zs
Maybe there's another reason for the "ugly" version to be preferred. Even if it is performance and not lazyness, I still don't understand what would make it faster.
Thanks,
Dimitri
Em 04/04/14 13:26, Rudy Matela escreveu:
You can test the speed in your ghci:
No. ghci is not a measure for efficiency of code. You need compiled (with optimisations) code to be able to judge and compare efficiency. Even when loading compiled and optimised code in ghci, ghci's runtime still behaves different from the runtime of the compiled code in binaries. To check the efficiency of code, ghc -O2 and the criterion library are your friends. Cheers, Daniel