我正在使用Scheme,我试图以递归方式删除列表中的倒数第二个元素。 这就是我所拥有的:
(define delete
(lambda (num lst)
(cond
((equal? (length lst) 1) '())
((null? lst) '())
(else (cons (car lst)(delete num (cdr lst)))))))
(define second
(lambda(lst)
(delete (- (length lst) 1) lst)))
(second '(1))
(second '(3 5 6))
(second '(2 7 8 4 9))
返回:
()
(3 5)
(2 7 8 4)
何时应该返回:
()
(3 6)
(2 7 8 9)
(第二个'(1))正在按照我的意图行事,但是我和其他部分一起玩了几个小时,我仍然不知所措。任何提示或建议都会非常感激。
编辑: 哇谢谢你!这是一行缺失代码-_- Duh me!
答案 0 :(得分:1)
你永远不会使用num参数。因此,您将始终迭代,直到列表包含1个元素或为null。当列表包含2个元素时,您可以添加一个特殊情况:
(define delete
(lambda (num lst)
(cond
((equal? (length lst) 2) (cdr lst))
((equal? (length lst) 1) '())
((null? lst) '())
(else (cons (car lst)(delete num (cdr lst)))))))
(define second
(lambda(lst)
(delete (- (length lst) 1) lst)))
由于未使用num参数,您可以执行以下操作:
(define delete_second_last
(lambda (lst)
(cond
((equal? (length lst) 2) (cdr lst))
((equal? (length lst) 1) '())
((null? lst) '())
(else (cons (car lst)(delete_second_last (cdr lst)))))))
(delete_second_last '(3 6 7 9 10))