如何使用cond语句在Scheme中遍历列表并获取最后一个元素?
获取列表最后一个元素的Scheme实现
你可以通过补充cond的分支来实现需求,核心逻辑是递归遍历列表的cdr,直到cdr为空,此时当前列表的car就是最后一个元素。完整代码如下:
(define (last-element lst) (cond ((null? lst) '()) ; 空列表返回空 ((null? (cdr lst)) (car lst)) ; 当cdr为空,当前car就是最后一个元素 (else (last-element (cdr lst))))) ; 递归处理剩余的cdr部分
关键语法说明:
- 把参数名从
list改成lst,避免和Scheme内置的list函数冲突 - 新增的第二个
cond分支:用(null? (cdr lst))判断当前列表的后续部分是否为空,满足条件时返回(car lst),也就是当前列表的第一个元素(此时它就是整个列表的最后一个元素) else分支里递归调用last-element处理(cdr lst),逐步缩小列表范围,直到触发前两个分支
测试示例:
调用 (last-element '(1 2 3 4)) 会返回 4,传入空列表 () 则返回空列表。
内容的提问来源于stack exchange,提问作者Shink
相关产品推荐
相关产品推荐

