检查两组是否相等 - 方案

时间:2011-09-21 19:31:51

标签: recursion scheme set

;checks to see if two sets (represented as lists) are equal

(define (setsEqual? S1 S2)
(cond
 ( (null? (cdr S1)) (in_member S1 S2))
 ( (in_member (car S1) S2) (setsEqual? (cdr S1) S2))
 (else false)))

;checks for an element in the list
(define (in_member x list)
(cond
 ( (eq? x (car list)) true)
 ( (null? list) false)
 (else (in_member x (cdr list)))))

似乎无法找到一个基础案例来实现这一点。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:3)

什么是套装? (这是一个列表---好吧,什么是列表?)这里有一个提示:“list”有两个变种:'()(又名null,又名empty)和那些用cons制作。您的函数应遵循它们使用的数据结构。你的没有。

我建议阅读How to Design Programs(在线提供的文字);它将教你一个解决这些问题的“设计方法”。粗略概述是:半正式描述您的数据(回答什么是列表?),制定示例和测试;使用您对数据的描述来创建模板来处理这类数据;最后,填写模板。关键是模板由数据定义决定。它是可重用的,如果你已经正确地创建了模板和示例,那么填写特定函数的模板通常可以在中完成。

HtDP第9章详细讨论了处理列表。这对in_member有帮助。 第17章讨论处理多个复杂的参数(例如,一次两个列表)。还有一个提示:如果我正在编写这个函数,我将使用关于集合的以下事实:如果每个集合是另一个集合,则两个集合相等。