[Haskell-beginners] Re: question about styles of recursion

7stud bbxx789_05ss at yahoo.com
Thu Mar 26 16:43:24 EDT 2009

Michael Mossey <mpm <at> alumni.caltech.edu> writes:

> In RWH, in the exercises at the end of the book,

There are no exercises at the end of the book.

> I was told to write a 
> function that averages the integer values in a list. I wanted to do this 
> using on the tools we had been presented, which did not include 
> 'length'. 

Ok. That sounds like you are working on the exercises for chapter 3
on p.69, specifically exercise 3.  The length function was introduced 
before the sum function, which I see you are using in your 
function definition.  See p. 15. The length function was also 
mentioned in exercise 1, and the instructions for exercise 3 mention
using the length of the list.

> So I thought of writing a recursive function in which each 
> case passes an accumulator of the "sum so far" as well as a count of 
> node "up to the point", and the base case does the actual division. I 
> was wondering if there is a better way of doing it (using the just ideas 
> up to chapter 3, so no length, no higher order functions, no foldr/foldl 
> or map).
> myAvg' :: Int -> [Int] -> [ Double ] -> Double
> myAvg' sum count []     = sum / fromIntegral count
> myAvg' sum count (x:xs) = myAvg' (x + sum) (n + 1) xs

Use variables that are defined? 

Prelude Data.List> :load ehask.hs 
[1 of 1] Compiling Main             ( ehask.hs, interpreted )

ehask.hs:3:44: Not in scope: `n'
Failed, modules loaded: none.

More information about the Beginners mailing list