如何编写一个函数来获取列表的最后一个元素?
答案 0 :(得分:5)
找到列表的最后一个:
(define (last l)
(cond ((null? (cdr l)) (car l))
(else (last (cdr l)))))
使用map最后映射到列表:
(map last '((a b) (c d) (e f)))
==> (b d f)
所以一个新功能:
(define (last-list l)
(map last l)
)
(last-list '((a b) (c d) (e f)))
==> (b d f)
答案 1 :(得分:4)
可能不是最有效的,但肯定是最简单的一种:
(define (last lst)
(car (reverse lst)))
示例:
(last '(1 2 3 4)) => 4
(last '((a b) (b c) (d e))) => (d e)
答案 2 :(得分:3)
您编写的代码 - 获取列表的最后一个元素 - 正确返回列表的最后一个元素。你有一份清单。有一个外部列表
(x y z)
,其中
x = (a b)
y = (c d)
z = (e f)
所以你得到了列表的最后一个元素z,即(e f)
您是否希望您的上一个功能有所不同?如果希望它返回最后一个嵌套列表的最后一个元素,则需要更改基本案例。现在你回车了。相反,你想检查汽车是否是一个列表,然后在那上面调用你的嵌套最后一个函数。
有意义吗?
答案 3 :(得分:1)
你的上一个功能很好,但你现在必须考虑你想用它做什么。
你有一个列表列表,你想要取最后一个列表。
所以每次都应用它来递减你的列表:
(define (answer lst)
(cond ((null? (cdr l)) null)
(else (cons (last (car l)) (answer (cdr lst))))
答案 4 :(得分:1)
又一种可能性:
(define (last thelist)
(if
(null? (cdr thelist)) (car thelist)
(last (cdr thelist))))
(define (all-last lists) (map last lists))
编辑:刚看到你不知道map
,并想要一个没有它的解决方案:
(define (all-last lists)
(if
(null? lists) `()
(cons (last (car lists)) (all-last (cdr lists)))))
就获取一个空列表而言,我猜你正在尝试将这个类似地图的前端与last
的原始定义一起使用,而它的目的是使用last
的定义。 {1}}我在上面给出了。请尝试以下定义:
(define (last thelist) (if
(null? (cdr thelist)) (car thelist)
(last (cdr thelist))))
(define (all-last lists) (if
(null? lists) `()
(cons (last (car lists)) (all-last (cdr lists)))))
并进行快速测试:
(全部最后`((a b)(c d)(e f)))
结果应为:
(b d f)
答案 5 :(得分:0)
(define last
(lambda (ls)
(list-ref ls (- (length ls) 1))))
答案 6 :(得分:0)
我喜欢简短,甜蜜,快速,尾部递归的程序。
命名为让我的朋友。
这解决了原始问题,如果列表没有最后一个元素,则返回#f。
(定义(最后L)(让f((最后#f)(L L))(如果(空?L)最后(f(车辆L)(cdr L)))))
答案 7 :(得分:0)
获得所需内容的最佳方式:
(define (last lst)
(cond [(empty? lst) empty]
[(empty? (rest lst)) (first lst)]
[else (last (rest lst))]))