[jhc] Performance of lazy-lists

Henning Thielemann jhc at henning-thielemann.de
Sat Nov 20 09:49:47 EST 2010


On Sat, 20 Nov 2010, Robert Clausecker wrote:

> Hi folks!
> 
> I try to use this awesome compiler and have several questions.
> 
> 1. I have this program (see atachement):
>
>  Now, the first solution is faster with both ghc and jhc, but with jhc
> it runs in something like O(n) instead of the second, which runs in
> O(1). Why?

I don't understand what you want to do, certainly because I have not heard of 
Zeckendorf before. However the use of (!!) is discouraged, since it has to scan 
the list from the beginning. Try to avoid it by clever uses of 'zip' or 
'tails'.

The use of 'read' for parsing command line arguments is not correct, since 
'read' expects that the argument string actually represent a value of the 
target type. It aborts your program with an error if the command line argument 
is not a number. You may use
   case reads countStr of
      [(count, "")] -> proceedWith count
      _ -> IO.hPutStrLn ("no or ambigous parse of " ++ countStr) >>
           exitFailure nr

> 2. Are there any special CPP-flags to find out, whether my program is
> compiled with jhc, if CPP is enabled?

I suggest to stay away from CPP. You can move compiler dependent code to 
separate modules and access them with Cabal flags:

Hs-Source-Dirs: src
If impl(jhc)
   Hs-Source-Dirs: src-jhc
Else
   Hs-Source-Dirs: src-gen


More information about the jhc mailing list