[Haskell-cafe] how to print out intermediate results in a recursive function?

Brent Yorgey byorgey at seas.upenn.edu
Sat Feb 4 15:27:50 CET 2012


On Sat, Feb 04, 2012 at 12:23:07PM -0600, Qi Qi wrote:
> Hello,
> 
> I have a question;how can I print out the intermediate number lists in a
> mergesort recursive function like the following one.
> 
> merge [] ys = ys
> merge xs [] = xs
> merge (x:xs) (y:ys) = if x <= y
>                       then x : merge xs (y:ys)
>                       else y : merge (x:xs) ys
> 
> mergesort [] = []
> mergesort [x] = [x]
> mergesort xs = let (as, bs) = splitAt (length xs `quot` 2) xs
>                in merge (mergesort as) (mergesort bs)
> 
> main = do
>        print $ mergesort [5,4,3,2,1]
>   
> 
> In the main function, it only prints out the final number list. But I'd
> like to print out the number lists in every recursive level. How can I
> do that? Thanks.

For visualizing intermediate steps for the purpose of
debugging, there is also the very nice hood package:

  http://hackage.haskell.org/package/hood

-Brent



More information about the Haskell-Cafe mailing list