[Haskell-cafe] Stupid newbie question
brianh at metamilk.com
Sat Jan 6 06:54:59 EST 2007
Brian Hurt wrote:
> nth 0 (x:xs) = Some x
> nth i (x:xs) = if i < 0 then Empty else nth (i-1) xs
> nth i  = Empty
[blows stack on large i]
As other people have pointed out, this is due to laziness. I'd write it
nth 0 (x:_) = Some x
nth i (_:xs) = of i < 0 then Empty else (nth $! i-1) xs
nth _  = Empty
where a general rule of thumb is always to replace (fun intexp) by (fun $!
intexp) whenever intexp is just a trivial arithmetic expression that doesn't
involve traversing (ie forcing of) any other data structure.
More information about the Haskell-Cafe