From Newsgroup: comp.lang.lisp
B. Pym wrote:
Kenny Tilton wrote:
What if the sequence is empty?
(defun average (sequence)
(let ((len 0)
(sum 0))
(map nil #'(lambda (elt)
(incf len)
(incf sum elt))
sequence)
(if (zerop len)
0
(/ sum len))))
(defun average (sequence &key (key #'identity) &aux (len 1))
(/ (reduce (lambda (x y)
(incf len)
(+ x y))
sequence :key key :initial-value 0)
len))
Testing:
* (average '(2 3 4))
9/4
Incorrect.
Gauche Scheme
(define (average seq)
(let1 len 0
(if (null? seq)
0
(/ (fold (lambda (x sum) (inc! len) (+ x sum))
0
seq)
len))))
(defun average (seq)
(if seq
(do ((sum 0 (+ sum (pop seq)))
(i 0 (+ 1 i)))
((not seq) (/ sum i)))
0))
--- Synchronet 3.21a-Linux NewsLink 1.2