
Hi John, your transformation on the original program amounts to replacing all occurrences of a Haskell literal with a Haskell variable. You will therefore end up with something that looks like this : loop sIZE = return () loop j = ... sIZE is now a pattern variable, that is, the pattern of the first clause is irrefutable, so all calls to loop will return immediately. What you were probably looking for is: loop j | j == sIZE = return () | otherwise = ... -- Mathieu On Fri, Apr 16, 2010 at 04:41:06PM +0100, John Lato wrote:
From: Mathieu Boespflug
Dear haskell-cafe,
I implemented the Floyd Warshall algorithm for finding the shortest path in a dense graph in Haskell, but noted the performance was extremely poor compared to C. Even using mutable unboxed arrays it was running about 30 times slower. I rewrote the program several times, to arrive at the following definition:
My results are basically the same as Max's, but if I change
#define SIZE 1500 to sIZE = 1500
and all references from "SIZE" to "sIZE", something ... changes. A lot.
MacBook-1:Desktop johnlato$ time ./FW Allocating ... Allocating ... done
real 0m0.027s user 0m0.013s sys 0m0.014s
I can't figure this out at all. Can anyone else confirm, or offer a good explanation?
John