
Michael Mossey
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.