Вы можете сделать простую вещь и просто извлечь каждое третье значение:
(define (average-prices a-list)
(/ (apply + (map fourth a-list)) (length a-list)))
Это немного неэффективно, поскольку он создает промежуточный список, и я предполагаю, что именно поэтому вы попытались foldl
. Вот правильный способ сделать это:
(define (average-prices a-list)
(/ (foldl (lambda (x acc) (+ (third x) acc)) 0 l)
(length a-list)))
Все еще есть небольшая неэффективность - length
выполняет второе сканирование - но это то, о чем вам не стоит беспокоиться, поскольку вам понадобятся несколько действительно длинных списков, чтобы получить какие-либо видимые замедление.