我试图解决一个问题,即检查天气,元素x是列表的最后一个元素 我的尝试是:
(Define (last x L)
(Cond
((NULL? (cdr L)) (EQ? x (car L)) #T )
(else (last x (cdr L)))))
但我觉得有些不对劲。请你能帮助我吗?
谢谢
答案 0 :(得分:0)
这将是正确的版本:
(define (last? elt lst)
(cond
((null? lst) #f)
((null? (cdr lst)) (eq? elt (car lst)))
(else (last? elt (cdr lst)))))
(eq? x (car lst))
已经产生布尔值,无需添加#t
x
不是一个非常富有表现力的名字,通常不会使用诸如L
之类的大写字母;易于理解的变量名称为elt
(对于“元素”)和lst
(对于“列表”)该程序也可以简单地写成
(define (last? elt lst)
(if (null? lst)
#f
(eq? elt (car (reverse lst)))))
甚至更短:
(define (last? elt lst)
(and (not (null? lst))
(eq? elt (car (reverse lst)))))