Привет, ребята, я использую схему MIT и пытаюсь написать процедуру, чтобы найти среднее значение всех чисел во множестве вложенных списков, например:
(average-lists (list 1 2 (list 3 (list 4 5)) 6)))
Должен вернуться 3.5. Я играл со следующим кодом в течение нескольких дней, и сейчас я получаю его, возвращая сумму, но не среднее значение. Кроме того, важно, чтобы значения самых внутренних списков вычислялись первыми, поэтому не нужно извлекать все значения и просто их усреднять.
Вот что у меня есть:
(define (average-lists data)
(if (null? data)
0.0
(if (list? (car data))
(+ (average-lists (car data)) (average-lists (cdr data)))
(+ (car data) (average-lists (cdr data))))))
Я пробовал этот подход, а также пытался использовать map
для рекурсивного сопоставления лямбда-функции и некоторых других, но я просто не могу ее найти. Я думаю, что я делаю вещи сложнее, чем должно быть.
Я написал следующее, пытаясь найти и другие пути, которые могут оказаться полезными:
(define (list-num? x) ;Checks to see if list only contains numbers
(= (length (filter number? x)) (length x)))
(define (list-avg x) ;Returns the average of a list of numbers
(/ (accumulate + 0 x) (length x)))
Ваша помощь очень ценится! Эта проблема была для меня кошмаром. :)