【发布时间】:2012-09-15 18:47:19
【问题描述】:
我有一个作业问题,要求我使用 lambda 编写一个函数,该函数使用一个数字列表并删除除每个数字第一次出现之外的所有数字。我的功能是我认为很好,除了它产生错误的结果!它生成一个列表,其中包含每个数字的最后一次出现。它生成一个与正确列表具有相同值的列表,只是顺序不同。这是我的代码:
(define (remove-duplicates numlist)
(foldr (lambda (a b)
(cond
[(not (member? a b)) (cons a b)]
[else b])) empty numlist))
我尝试过使用foldl 而不是foldr,但不出所料,它会生成正确的列表,但相反。有没有一种方法可以生成正确的列表,而无需使用另一个 lambda 表达式来反转 foldl 创建的列表?
请记住,这是作业,所以请不要明确回答。
谢谢大家!
【问题讨论】:
-
例如,使用列表'(9 0 2 1 0 9 0 2 1 0) 应该产生'(9 0 2 1),而不是我得到'(9 2 1 0 )。谢谢。
-
我有一个使用 foldl 的两种实现的解决方案,其中第一个使用第二个的结果作为递归列表。这似乎是需要额外迭代才能运行的伪劣代码......