Object 什么';这个密码怎么了?(计划)

Object 什么';这个密码怎么了?(计划),object,types,scheme,Object,Types,Scheme,我在scheme中设置了一个过程,它将分析一个列表,当列表为奇数时返回中间索引,当列表为偶数时返回中间2个值的平均值。以下是我所拥有的(这些设备本身运行得非常好): 这里是实际的程序,没有那些助手的混乱 (define (median lst) (if (null? lst) '() (if (even? lst) (median-index-even lst) (median-index-odd lst)

我在scheme中设置了一个过程,它将分析一个列表,当列表为奇数时返回中间索引,当列表为偶数时返回中间2个值的平均值。以下是我所拥有的(这些设备本身运行得非常好):

这里是实际的程序,没有那些助手的混乱

(define (median lst)
    (if (null? lst) 
       '()
        (if (even? lst) 
            (median-index-even lst)
            (median-index-odd lst))))
但是,当我尝试运行测试用例时,会出现一个错误:

(display (median '(1 2 2 3 3 3 4 5))) (newline)
作为第一个参数传递给整数余数的对象(1 2 3 3 4 5)的类型不正确


编辑:好的,是的,我完全忽略了
(偶数?(长度lst))
部分。我目前正在调试助手

对于初学者来说,这一行是错误的,列表不能是偶数:

然而,列表的长度是另一回事:

(if (even? (length lst))
此外,在这两个过程中,用于确定是否已到达列表中点的比较是错误的,您必须在两个帮助程序中调整此行,因为当前不起作用:

(if (= times_carred ...
如果您在
1
中启动
执行次数
,并将条件更改为
(>=执行次数(/(长度lst)2))
,则会更简单,相同的比较适用于这两种情况。

(如果(=执行次数(/(+(长度lst)1)2))有一个bug,因为它涉及到内部列表的长度,而不是传递到中间索引的外部列表。他应该将它们更改为不同的名称,或者将行更改为(if(=times_carred(+(length lst)1)))
(if (even? (length lst))
(if (= times_carred ...