【发布时间】:2012-10-21 22:14:43
【问题描述】:
我正在尝试编写一个简单的方案函数来返回列表的最后一个元素。我的功能看起来应该可以工作,但我设法在某些事情上失败了:
(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))
如何修复此功能?
【问题讨论】:
-
如果你的函数传入空列表会发生什么?当然,您的讲师可能不在乎。他或她有没有说过你可以对数据做出什么假设?对于家庭作业,我认为折扣非列表数据可能是合理的,但在列表上下文中,空列表是合理的预期。其实有一种简单的处理方式,也能合理处理其他非列表数据……