![]() |
|
|
![]()
|
|
| AlexSas |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 14.11.2009 Репутация: нет Всего: нет |
Здравствуйте!!! Преподаватель дал задание написать степень-множество и отсортировать его. Саму степень я написал, а вот с сортировкой возникли сложности - препод сказал, что в списке могут быть и СИМВОЛЫ!!!!! А как организовать сортировку символов???
В общем, результат этой проги (степень-множество) мне надо отсортировать. Причем здесь могут быть символы, числа и их помесь. Есть ли возможность сравнивать списки символов (например, (a b c) и (a c d)) как числовые списки? Помогите пожалуйста кто чем может!!!!!!!!!!! Очень надо!!!!!!!!!!! Это сообщение отредактировал(а) Void - 15.11.2009, 12:52 |
|||
|
||||
| VH_ |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 31.10.2006 Репутация: 10 Всего: 11 |
Хювёнен-Сеппянен "Мир Лиспа" т.1 стр.273-274:
"Далее <...> мы определим очень полезный с точки зрения абстрактного построения функционал ИНДЕКС, который осуществляет над выражениями X = (X1 X2 ... XN) и Y действия по следующей схеме: (индекс x y fn) <=> (fn 'X1 (fn 'X2 ... (fn 'XN y) ...)) Получим для функционала ИНДЕКС простое рекурсивное определение:
<...> Функционал ИНДЕКС очень полезен. С его помощью можно, например, вычислить и множество всех подмножеств множества (power set) (Ваш препод не это имел в виду? - VH.):
Это сообщение отредактировал(а) VH_ - 16.11.2009, 13:11 |
||||
|
|||||
| AlexSas |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 14.11.2009 Репутация: нет Всего: нет |
[quote]
Функционал ИНДЕКС очень полезен. С его помощью можно, например, вычислить и множество всех подмножеств множества (power set) (Ваш препод не это имел в виду? - VH.): [/quot] Да-да именно это Это сообщение отредактировал(а) AlexSas - 15.11.2009, 11:38 |
|||
|
||||
| VH_ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 31.10.2006 Репутация: 10 Всего: 11 |
Как раз «программа выдает подмножества» в весьма упорядоченном виде, а именно:
(powerset '(1 2 3 4)) возвращает (черточки находятся на местах исключенных элементов, числа в комментариях получаются, если черточки заменить на 1, а не-черточки - на 0 и перевести двоичное число <в формате "младшие биты слева"> в десятеричный вид)
А Вам (то есть, канечна, преподу) какое упорядочивание надо? Давайте сформулируем <сначала> правила. Это сообщение отредактировал(а) VH_ - 16.11.2009, 16:34 |
|||
|
||||
| AlexSas |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 14.11.2009 Репутация: нет Всего: нет |
Понимаете, когда я показал преподавателю результат итерационной версии
(NIL (1) (2) (1 2) (3) (1 3) (2 3) (1 2 3) (4) (1 4) (2 4) (1 2 4) (3 4) (1 3 4) (2 3 4) (1 2 3 4)), мне сказали, что должно получаться множество вида (NIL (1) (2) (3) (4) (1 2) (1 3) (1 4) (2 3) (2 4) (3 4) (1 2 3) (1 2 4) (1 3 4) (2 3 4) (1 2 3 4)) или, как в Вашей программе, наоборот (от (1 2 3 4) до (NIL)). Кроме того, он сказал мне, что вместо чисел могут быть и символы. Я даже числовые списки не могу построить таким образом, не говоря уж о символьных. Я пробовал сравнивать два списка вида (1 3) (1 4) поэлементно (что у меня не очень получилось), но вот как сравнивать, например, (a b) и (a c) - я вообще не знаю. Это сообщение отредактировал(а) AlexSas - 16.11.2009, 22:03 |
|||
|
||||
| VH_ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 31.10.2006 Репутация: 10 Всего: 11 |
Понятно, препод хочет поалфавитуидлинеотсортированные.
Попробуем. Рассмотрите функцию (symbol-name). |
|||
|
||||
| AlexSas |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 14.11.2009 Репутация: нет Всего: нет |
Правильно ли я понял идею: symbol-name возвращает имя переменной как строку. То есть, мы сможем использовать операции string=, string< и string>, и таким образом, сравнивая списки поэлементно, определить, какой из них больше/меньше? Подумаю над этим и выложу результат. Спасибо огромное!!!
|
|||
|
||||
| VH_ |
|
||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 31.10.2006 Репутация: 10 Всего: 11 |
Функция (.LT.) предполагает, что числа «раньше» символов. Может быть, упорядочивание по длине списка имеет смысл, а вот упорядочивание списков одинаковой длины по содержимому - IMHO не имеет, так как списки <в соответствии с заданием> представляют собой множества, в которых порядок элементов в списке не важен и множество (1 2 B) - это то же самое, что (В 2 1), а это приводит к ситуации, когда результат может выглядеть (... (3 1 A) ... (B 2 1) ...) либо (... (1 2 B) ... (1 A 3) ...), то есть те же множества располагаются во взаимно обратных последовательностях, и это зависит от <случайной> исходной последовательности. Так что можно сделать функцию (INSERT) без обращения к функции (.LT.) и излишнего тасования колоды:
Это сообщение отредактировал(а) VH_ - 19.11.2009, 11:17 |
||||||||
|
|||||||||
| AlexSas |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 14.11.2009 Репутация: нет Всего: нет |
Преподу Ваша сортировка очень понравилась, так что я сдал программу!!!
Спасибо Вам огромное, VH, без Вашей помощи я бы не справился!!!! Это сообщение отредактировал(а) AlexSas - 27.11.2009, 21:42 |
|||
|
||||
![]()
|
| Правила форума LISP | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | LISP | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |