2011-03-02 112 views
1

好的,我需要一些帮助来思考这个问题。 我需要检查列表和另一个列表是否在结构上相同。球拍/方案检查结构是否相等

例如:

(一个(BC)DE))是相同的(F(GH)IJ)),因为它们具有相同的结构。

现在清楚的基本情况是,如果两个列表都是空的,它们在结构上是相等的。

另一方面,递归的情况我不知道从哪里开始。

一些想法:

嗯,我们是不会介意的元素==到对方,因为这并不重要。我们只关心结构。我知道我们会放下列表并递归调用带有列表的cdr的函数。

迷惑我的部分是你如何确定一个原子或子列表是否具有相同的结构?

任何帮助将不胜感激。

回答

2

你到了那里。在(免费的,在线的,优秀的)教科书中,这可以归为第17.3节“同时处理两个列表:案例3”。我建议你看看。

http://www.htdp.org/2003-09-26/Book/curriculum-Z-H-1.html#node_toc_node_sec_17.3

警告:它看起来像你正在使用的数据定义为“S-表达”,你能说出这样的:

;; an s-expression is either 
;; - the empty list, or 
;; - (cons symbol s-expression), or 
;; - (cons s-expression s-expression) 

由于该数据的定义有三个在考虑其中两种情况时,有九种可能性。

约翰·克莱门茨

(是的,你可以通过在更普遍的一个,包括不当列表中嵌入数据减少案件的数量。听起来并不像一个好主意给我。)

+0

好如此一来,把两个表达放在一起,这对我们有什么帮助? – dsjoka 2011-03-03 00:19:46

+0

这个想法怎么样?如果我们把一个列表放在一起并且长度相同,那么它们在结构上是相等的? – dsjoka 2011-03-03 00:24:32

+0

我的意思是统计多少次,我们做的是缺点 – dsjoka 2011-03-03 00:29:37