Согласно этой странице вам необходимо обработать два случая:
- Длина списка - четное число.
- Это не четное число.
Для первого случая вам нужно взять два значения в середине, посчитать их сумму, а затем разделить на два.Во втором случае вам нужно найти середину отсортированного списка, и это значение будет срединным.
Итак, я думаю, это должно работать для вас:
(define (count-median-for-even len listOfVal)
(/ (+ (list-ref listOfVal (round (- (/ len 2) 1)))
(list-ref listOfVal (round (/ len 2)))) 2))
(define (count-median-for-odd len listOfVal)
(list-ref listOfVal (round (/ len 2))))
(define median
(lambda (medianList)
(let ((values (listofVal medianList)))
(let ((len (length medianList)))
(if (even? len) (count-median-for-even len values) (count-median-for-odd len values))))))
Имеяпроверил это на трех тестовых примерах по ссылке выше, я могу сказать, что это должно сделать работу за вас.