【发布时间】:2016-03-02 04:08:42
【问题描述】:
如何在球拍中一步一步完成?我写了一段代码,它似乎工作得很好。但是,我不明白。
(来源:uwaterloo CS 2015 秋季作业 09,应于 11 月 24 日到期)
问题是:编写一个函数unique-fn,它使用一个列表和一个谓词相等函数并产生相同的列表
这样根据提供的相等谓词删除所有重复项。不能使用排序或递归。例如,
(check-expect (unique-fn '(3 1 3) =) '(3 1))
(check-expect (unique-fn '(1 1.05 2 1.2)
(lambda (x y) (> 0.1 (abs (− x y)))))
'(1 2 1.2))
这是我的代码,但我不明白如何:
(define (unique-fn list-of-elm pred?)
(foldr (lambda (x y)
(cons x (foldr (lambda (a b)
(cond[(pred? x a) b]
[else (cons a b)])) empty y)))
empty list-of-elm))
我真的不知道如何解决这个问题。我知道 foldr 从右边折叠,但是这个“嵌套”的 foldr 实际上是如何工作的?有什么想法吗?
【问题讨论】:
-
因为您的代码中的
foldr会调用自身。它正在使用递归,不符合您问题中所述的要求。 -
(foldr f z [a,b,...,n]) == (f a (f b (...(f n z)...))).
标签: functional-programming scheme racket