;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)))))
似乎无法找到一个基础案例来实现这一点。任何帮助表示赞赏!
答案 0 :(得分:3)
什么是套装? (这是一个列表---好吧,什么是列表?)这里有一个提示:“list”有两个变种:'()
(又名null
,又名empty
)和那些用cons
制作。您的函数应遵循它们使用的数据结构。你的没有。
我建议阅读How to Design Programs(在线提供的文字);它将教你一个解决这些问题的“设计方法”。粗略概述是:半正式描述您的数据(回答什么是列表?),制定示例和测试;使用您对数据的描述来创建模板来处理这类数据;最后,填写模板。关键是模板由数据定义决定。它是可重用的,如果你已经正确地创建了模板和示例,那么填写特定函数的模板通常可以在秒中完成。
HtDP第9章详细讨论了处理列表。这对in_member
有帮助。
第17章讨论处理多个复杂的参数(例如,一次两个列表)。还有一个提示:如果我正在编写这个函数,我将使用关于集合的以下事实:如果每个集合是另一个集合,则两个集合相等。