Вот упрощенная реализация. Поскольку медиана - это просто точка, в которой половина значений находится выше, а половина - ниже, вы можете отсортировать список и найти среднюю точку. В зависимости от того, является ли количество элементов нечетным или четным, вы можете выбрать среднюю точку в отсортированном списке (нечетное) или среднее значение двух средних точек (четное)
(define (median lst)
(let ((len (length lst))
(nlst (sort lst >)))
(if (even? len)
(/ (+ (list-ref nlst (/ len 2))
(list-ref nlst (- (/ len 2) 1))) 2)
(list-ref nlst (truncate (/ len 2))))))
Если это домашнее задание, такая неприятная версия может получить "D", но она работает.
> (median (list 5 2 6 2))
3 1/2
> (median (list 5 2 6 3 1))
3
>