Что такое набор?(Это список --- хорошо, что такое список?) Вот подсказка: есть два варианта «списка»: '()
(он же null
, он же empty
) и те, которые сделаны с cons
.Ваши функции должны соответствовать структуре данных, которые они потребляют.Ваш нет.
Я рекомендую прочитать Как разрабатывать программы (текст доступен онлайн);это научит вас «рецепту дизайна» для решения подобных проблем.Грубая схема такова: опишите ваши данные полуформально (что отвечает что такое список? ), сформулируйте примеры и тесты;используйте ваше описание данных для создания шаблона для обработки данных такого типа;наконец, заполните шаблон.Ключевым моментом является то, что шаблон определяется определением данных.Его можно использовать повторно, и заполнение шаблона для определенной функции часто можно выполнить за секунд --- если вы правильно создали шаблон и примеры.
HtDP Глава 9 посвящена обработкесписки, в частности.Это поможет с in_member
.Глава 17 рассказывает об обработке нескольких сложных аргументов (например, двух списков одновременно).Еще один совет: если бы я писал эту функцию, я бы использовал следующий факт о наборах: два набора равны, если каждый является подмножеством другого.