racket / scheme检查结构是否相等

时间:2011-03-02 22:23:33

标签: racket

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

例如:

(a(bc)de))与(f(gh)ij))相同,因为它们具有相同的结构。

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

另一方面,递归案例我不知道从哪里开始。

一些想法:

好吧,我们不会关心元素是否= =彼此因为无关紧要。我们只关心结构。我知道我们将在列表中下载并递归地使用列表的cdr调用该函数。

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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

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

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

有一点需要注意:看起来您使用的数据定义是“s-expression”,您可以这样说:

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

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

John Clements

(是的,您可以通过将数据嵌入到包含不正确列表的更一般的数据中来减少案例数。对我来说听起来不是一个好主意。)