Lisp 如何求方案中列表的中位数

Lisp 如何求方案中列表的中位数,lisp,scheme,computer-science,median,Lisp,Scheme,Computer Science,Median,我对这个计划还不熟悉,我正在使用Racket博士来试图找到名单的中位数 例如,(中值2 1 3)应返回2,(中值1 5 5 2 3)应返回2.5 我使用的是R6RS方案规范,允许使用get line 以下是我到目前为止的情况: #!r6rs (import (rnrs)) (define (median-interactive lst) (display "Enter input:") (let ((input (get-line (current-input-port))))

我对这个计划还不熟悉,我正在使用Racket博士来试图找到名单的中位数

例如,
(中值2 1 3)
应返回
2
(中值1 5 5 2 3)
应返回
2.5

我使用的是R6RS方案规范,允许使用
get line

以下是我到目前为止的情况:

#!r6rs
(import (rnrs))

(define (median-interactive lst)
  (display "Enter input:")
  (let ((input (get-line (current-input-port))))
    (list-sort < lst)))
#!r6rs
(进口)
(定义(中间交互式lst)
(显示“输入:”)
(let((输入(获取行(当前输入端口)))
(列表排序

有人能帮我吗?

第一件事:“中间人互动”不应该叫“中间人”吗

第二件事:我强烈建议你完全独立于“中间交互”开发“中间交互”

事情三:你能举例说明中位数的作用吗?具体来说,您可以如何称呼“中值”以及它应该返回什么的具体示例


事情四:我猜这是家庭作业?

这是一个过于简单的实现。由于中间值正好是一半值在上面,一半值在下面的点,因此可以对列表进行排序并找到中间点。根据元素的数量是奇数还是偶数,您可以选择排序列表中的中点(奇数)或两个中点的平均值(偶数)

如果这是家庭作业,那么这样一个糟糕的版本可能会给你一个“D”,但它确实有效

> (median (list 5 2 6 2))
3 1/2
> (median (list 5 2 6 3 1))
3
> 

请注意,这与(平均)值不同。我在列表中有奇数个元素的中位数,但对偶数个元素不起作用。有人能帮我告诉我偶数函数有什么问题吗?
> (median (list 5 2 6 2))
3 1/2
> (median (list 5 2 6 3 1))
3
>