Racket 球拍/方案结构平等性检查

Racket 球拍/方案结构平等性检查,racket,Racket,好的,我需要一些帮助来思考这个问题。 我需要检查一个列表和另一个列表在结构上是否相等 例如: (a(bc)de)与(f(gh)ij)相同,因为它们具有相同的结构 现在很清楚,基本情况是,如果两个列表都为空,那么它们在结构上是相等的 另一方面,递归的情况我不确定从哪里开始 一些想法: 我们不关心元素之间是否为==因为这无关紧要。我们只关心结构。我知道我们会把列表压缩,然后用列表的cdr递归调用函数 让我困惑的是,如何确定一个原子或子列表是否具有相同的结构 任何帮助都将不胜感激。你就快到了。在(免费

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

例如:

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

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

另一方面,递归的情况我不确定从哪里开始

一些想法:

我们不关心元素之间是否为==因为这无关紧要。我们只关心结构。我知道我们会把列表压缩,然后用列表的cdr递归调用函数

让我困惑的是,如何确定一个原子或子列表是否具有相同的结构


任何帮助都将不胜感激。

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

一个警告:您正在使用的数据定义似乎是“s-expression”,您可以这样表述:

;; an s-expression is either
;; - the empty list, or
;; - (cons symbol s-expression), or
;; - (cons s-expression s-expression)
由于此数据定义有三种情况,因此在考虑其中两种情况时有九种可能性

约翰·克莱门茨


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

好的,那么cons,将两个s表达式放在一起,这对我们有什么帮助?这个想法如何,如果我们把一个列表合并在一起,并且它的长度相同,那么它们在结构上是相等的?我的评论可能只在HtDP(上面提到的教科书)的背景下才有意义。您的问题(两个S表达式具有相同的形状)需要考虑两个值,每个值都有三种可能的形状。这就产生了九种可能的组合。其中三个(都是空的,都是(cons符号s-exp),都是(cons符号s-exp s-exp))将需要额外的子检查(按照设计方法),另外六个将导致失败。不过,我还是不相信我的评论或术语在HtDP之外会有意义。我的两分钱。