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 <mb...@tweag.net> > > > > 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 _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe