我正在尝试编写一个简单的Scheme函数,用于返回列表的最后一个元素。我的函数看起来应该能够正常工作,但是我似乎在某些地方出了问题:
(define (last_element l)(
(cond (null? (cdr l)) (car l))
(last_element (cdr l))
))
(last_element '(1 2 3)) should return 3
DrRacket一直给我报错:
mcdr: contract violation
expected: mpair?
given: ()
由于 (null? '())
为真,我不明白为什么这样不起作用。
我认为这是我需要完成作业的一个函数(编写函数last-element
不是作业),指令说我不能使用内置函数reverse
,所以我不能简单地执行(car (reverse l))
我该如何修复这个函数?