[plt-scheme] science fair help
It was not knowing how many lists he'd have ahead of time. Here's what
I came up with:
;; avg: (listof number) -> number
;; consumes: a non-empty list of numbers
;; produces: the average of its elements
(define (avg alon)
(/ (foldr + 0 alon)
(length alon)))
(check-expect (avg (list 1 2 3 4 5)) 3)
(check-expect (avg (list 2 1 0 3 7)) 13/5)
;; avg-lists: (listof (listof number)) -> (listof number)
;; consumes: a list of lists of numbers -- all the same length
;; produces: a list of the element-wise averages
(define (avg-lists alolon)
(cond
[(andmap empty? alolon) empty]
[(cons? alolon) (cons (avg (map first alolon))
(avg-lists (map rest alolon)))]))
(check-expect (avg-lists (list (list 1 2 3 4) (list 2 1 0 3) (list 4 0 1 7)))
(list 7/3 1 4/3 14/3))
On Sun, Dec 13, 2009 at 8:45 PM, Matthias Felleisen
<matthias at ccs.neu.edu> wrote:
>
>
> (check-expect (average (list (list 1 3 5 7) (list 2 1 3 3) (list 3 8 1 5)))
> (list 2 4 3 5))
>
> (define (average lol)
> (map (lambda (a b c) (/ (+ a b c) 3)) (first lol) (second lol) (third lol)))
>
>
> yields
>
>> Welcome to DrScheme, version 4.2.3.4-svn4dec2009 [3m].
>> Language: Intermediate Student with lambda.
>> The test passed!
>> >
>
> So what's the problem? -- Matthias
>
>
>
> On Dec 13, 2009, at 8:02 PM, Todd O'Bryan wrote:
>
>> I have a student who's doing a science fair project and needs to find
>> the average for each location in a bunch (number unspecified) of
>> lists.
>>
>> For example, given
>>
>> (list 1 3 5 7) (list 2 1 3 3) (list 3 8 1 5)
>>
>> he'd like
>>
>> (list 2 4 3 5)
>>
>> I can write the function pretty easily in Module by writing an average
>> function that takes a variable number of arguments, but my attempts to
>> do it in Intermediate or Advanced are pretty complicated. Is there a
>> fairly easy way to do it in the teaching languages that I'm missing?
>> If not, I can just put together a teachpack for him that provides that
>> function so he can use it.
>>
>> Todd
>> _________________________________________________
>> For list-related administrative tasks:
>> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
>