【发布时间】:2013-06-05 00:41:13
【问题描述】:
我已经开始编写一个函数来查找列表中最后一次出现的元素。我的想法是使用search 来计算指定符号的出现次数并返回它。然后我会将计数传递给removeLast,这将删除该元素。然后我会减少removeLast 中的计数以方便基本情况。从我所看到的情况来看,使用set! 通常是不好的做法。有没有更好/更优雅的方式来“记住”符号的最后一次出现。
(define (lastLess lis symbol)
(define count 0)
(set! count (search symbol lis count))
(removeLast symbol lis count)
)
(define (search symbol lis count )
( cond ((null? lis) count)
( (eq? symbol (car lis)) (+ count (add1 (search symbol (cdr lis) count ))) )
( (pair? (car lis))(+ count(+ 0 (search symbol (car lis) count ))))
( else (+ count(+ 0 (search symbol (cdr lis) count))))
)
)
(define (removeLast symbol lis count)
(cond ((null? lis) '())
((eq? count 0) (cdr lis))
((eq? symbol (car lis)) ((set! count (sub1 count))
(cons (car lis)(removeLast symbol (cdr lis) count))
)
)
((pair? (car lis)) (removeLast symbol (car lis) count))
(else (cons (car lis) (removeLast symbol (cdr lis) count )))
)
)
按((set! count (sub1 count))(cons (car lis)(removeLast symbol (cdr lis) count)))) 运行代码会引发错误:
应用程序:不是程序; 期望一个可以应用于参数的过程 给定:# 论据...: '(e)
编辑:这是一个班级作业,所以多余的reverses 是不可接受的,我必须考虑嵌套列表。
【问题讨论】: