[plt-scheme] science fair help

From: Todd O'Bryan (toddobryan at gmail.com)
Date: Sun Dec 13 20:54:47 EST 2009

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
>
>


Posted on the users mailing list.