| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Prolog > Список и подсписок |
| Автор: Coderr 16.11.2010, 09:22 |
| Здравствуйте! Помогите решить задачку или, хотя бы, скажите какие простейшие функции нужны для её решения. Определите отношение подмножество(Множество, Подмножество), где Множество и Подмножество — два списка, представляющие два множества. Желательно иметь возможность использовать это отношение не только для проверки включения одного множества в другое, но и для порождения вмех возможных подмножеств заданного множества. Например: ?- подмножество([a,b,c], S). S = [a,b,c]; S = [b,c]; S = [c]; S = []; S = [a,c]; S = [a]; ... Насколько я понял, функция должна проверять вхождение Подмножества во Множество. Задачу надо сделать на SWI-Prolog. Поможете? |
| Автор: Cheloveck 16.11.2010, 10:28 | ||
как-то так PS поправил для решения второй задачи, но генерируемые подмножества с повторениями получаются. Нужно будет их проверить ещё раз include'ом. |
| Автор: Coderr 16.11.2010, 11:09 | ||
Что-то пошло не так... Команда ?- subset([a,b,c],S). возвращает
|
| Автор: Cheloveck 16.11.2010, 11:12 | ||
тут наоборот надо
У меня первый параметр - подмножество, а второй - множество. |
| Автор: Coderr 17.11.2010, 00:06 |
| Действительно, спасибо! А как сделать, чтобы рекурсия останавливалась? Если я, например, задаю команду ?- subset(S,[a,b,c]), то перебираются все возможные варианты, а потом список продолжается c [a,a,a,a] и до бесконечности. Такого быть не должно по заданию. |
| Автор: Coderr 22.11.2010, 22:46 |
| Препод сказал, что это неправильно. Дал подсказку: « Есть некие Множество и Подмножество. Чтобы определить, является ли Подмножество подмножеством Множества, надо последовательно проходить по ним и, если первые их элементы совпадают, отсекать эти первые элементы и продолжать сравнивать оставшиеся списки. Если первые элементы не совпадают, надо отсекать у Множества первый элемент и сравнивать оставшийся список с Подмножеством. На всякий случай, "отсекать" не значит, что надо использовать отношение "удалить". » Попытался сам что-то сделать, но ничего не вышло. В Прологе нет условных выражений и логического ИЛИ (по крайней мере, нам их в теории не дали). Помогите, пожалуйста. |
| Автор: Cheloveck 23.11.2010, 01:37 | ||
И, правда, работает. PS пролог изучаю пару недель, поэтому сразу не допёр. |
| Автор: Cheloveck 23.11.2010, 01:52 | ||||
Тут, кстати, получаются только упорядоченные подмножества
|
| Автор: Coderr 23.11.2010, 03:17 | ||
| Эх, я был близок. Первую и третью строки я писал, но не понял как разделить дальше на условия. =) Спасибо тебе, добрый Cheloveck, листинг работает как надо. А как работают строки
? |
| Автор: Coderr 23.11.2010, 16:04 |
| Спасибо! |