返回参数平均值的Scheme函数

返回参数平均值的Scheme函数,scheme,racket,Scheme,Racket,我试图在scheme中创建一个函数,返回其参数的平均值。这就是我目前所拥有的。当运行代码时,我得到6,当它应该是29/6。我试图在不使用递归的情况下做到这一点 (define iota (lambda (x) (letrec ((loop (lambda (x acc) (if (= x 0) acc (loop (sub1 x) (cons x acc)))))) (loop x '())))) (define avg (

我试图在scheme中创建一个函数,返回其参数的平均值。这就是我目前所拥有的。当运行代码时,我得到6,当它应该是29/6。我试图在不使用递归的情况下做到这一点

    (define iota
  (lambda (x)
    (letrec
      ((loop
        (lambda (x acc)
(if (= x 0) acc
(loop (sub1 x) (cons x acc))))))
         (loop x '()))))

(define avg
  (lambda ls
    (let ((size (apply + (map (lambda (x) 1) ls))))
      (apply + (map (lambda (x) (apply * (iota x))) ls))
      size)))

(avg 4 5 5 5 5 5)
测试:


这似乎有点复杂;像/apply+ls-length-ls这样的东西有什么问题吗?你在哪里看到了除法,为什么要涉及列表元素的阶乘?顺便问一下:这个letrec/loop部分,是一个显式递归过程-所以你没有达到不使用递归的目标。这回答了你的问题吗?
(define (avg . args)
  (/ (apply + args) (length args)))
(avg 4 5 5 5 5 5)
;; => 29/6