如何在Scheme/Lisp中编写此数据结构的平均函数?

unj*_*nj2 4 lisp scheme functional-programming racket

我想根据类似商品的平均价格找到新商品的价格.函数get-k-similar使用k-Nearest Neighbors,但返回此输出 ((list rating age price) proximity).

For example, 2-similar would be:
(((5.557799748150248 3 117.94262493533647) . 3.6956648993026904)
 ((3.0921378389849963 7 75.61492560596851) . 5.117886776721699))
Run Code Online (Sandbox Code Playgroud)

我需要找到类似物品的平均价格.即平均值为117和75.有更好的迭代方法吗?我的功能看起来太难看了.

(define (get-prices new-item)

  (define (average-prices a-list)
    (/ (cdr 
        (foldl (?(x y) (cons (list 0 0 0)
                             (+ (third (car x)) (third (car y))))) 
               (cons (list 0 0 0) 0)
               a-list))
        (length a-list)))

    (let ((similar-items (get-k-similar new-item)))
      (average-prices similar-items)))
Run Code Online (Sandbox Code Playgroud)

Rai*_*wig 5

Common Lisp

(/ (reduce '+ a-list :key 'caddar) (length a-list))
Run Code Online (Sandbox Code Playgroud)

要么

(loop for ((nil nil e) . nil) in a-list
      count e into length
      sum e into sum
      finally (return (/ sum length)))
Run Code Online (Sandbox Code Playgroud)