ракетка / схема проверки на равенство - PullRequest
1 голос
/ 03 марта 2011

Хорошо, мне нужна помощь для обдумывания этого концептуально. Мне нужно проверить, равен ли список и другой список структурно.

Например:

(a (bc) de)) совпадает с (f (gh) ij)), поскольку они имеют одинаковую структуру.

Теперь очищаем базовый случай, если оба списка пусты, они структурно равны.

С другой стороны, рекурсивный случай, я не уверен, с чего начать.

Некоторые идеи:

Что ж, нас не волнует, если элементы == друг к другу, потому что это не имеет значения. Мы просто заботимся о структуре. Я знаю, что мы найдем список и рекурсивно вызовем функцию с помощью cdr списка.

Меня смущает то, как вы определяете, имеет ли атом или подсписок одинаковую структуру?

Любая помощь будет оценена.

1 Ответ

2 голосов
/ 03 марта 2011

Ты добираешься туда.В учебнике (бесплатно, онлайн, отлично) это относится к разделу 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)

Поскольку в этом определении данных есть три случая, при рассмотрении двух из них есть девять возможностей.

Джон Клементс

(Да, вы можете уменьшить количествослучаи, встраивая данные в более общий, включающий неправильные списки. Для меня это не очень хорошая идея.)

...