[Закрыть]
 
popoff.donetsk.ua
Когда мечты сбываются, они умирают.
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Форум - Функциональное и логическое программирование - Рекурсия в Лиспе

Рекурсия в Лиспе

форумы popoff.donetsk.ua
Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Автор Сообщение
Jul
Юлия
Ноя, 2007
Сообщений: 4
Jul url://forum.message:2198
Рекурсия в Лиспе

Подскажите пожалуйста, как правильно сформулировать принцип решения задачи.
Дан список (1 2 3 4 5 6 7 8 9 10 ...)
Преобразовать в ((1)(2 3)(4 5 6)(7 8)(9)(10 11)(12 13 14)...)

Заранее спасибо.

popoff
Yuri
Июл, 2004
Сообщений: 923
popoff url://forum.message:2199

Jul,
А какая связь?

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
Jul
Юлия
Ноя, 2007
Сообщений: 4
Jul url://forum.message:2200

В смысле связь?
Надо из одноуровневого списка сделать двухуровневый ((1) (2 3) (4 5 6) (7 8)...) используя рекурсию, сгруппировав четко соблюдая заданную последовательность.

popoff
Yuri
Июл, 2004
Сообщений: 923
popoff url://forum.message:2201

какая последовательность - заданная?

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
Jul
Юлия
Ноя, 2007
Сообщений: 4
Jul url://forum.message:2202

То есть в списке должно быть по 1,2,3,2,1,2,3,2...элементов в подсписках

popoff
Yuri
Июл, 2004
Сообщений: 923
popoff url://forum.message:2203

Ну, тут много разных вариантов.

Например, можно сделать 4 функции:
1-я будет добавлять в результат один текущий элемент списка и вызывать вторую
2-я будет добавлять два первых элемента и вызывать третью
3-я будет добавлять три и вызывать 4-ю
4-я будет добавлять два и вызывать первую
Естественно, во всех функциях условие завершение рекурсии, проверка на наличие достаточного числа элементов в исходном списке и т.п.

Можно сделать две функции. Первая (не рекурсивная) будет брать на вход список и первые 8 элементов списка вставлять по правилу 1-2-3-2, естественно, с проверкой на наличие достаточного числа элементов. А вторая (рекурсивная) функция будет будет вызывать на каждом шаге эту первую функцию и вглубь передавать исходный список, удаляя из него первые 8 элементов.

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

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
Jul
Юлия
Ноя, 2007
Сообщений: 4
Jul url://forum.message:2208

Спасибо за варианты. Я останавливаюсь на 2-м, наверное будет наиболее подходящий.
По не рекурсивной,я думаю должно быть примерно так:
1. проверка на пустой список
2. условие (cond) делать через цикл перебирать до 8 элемента,а вот правило 1-2-3-2 я не могу придумать, и если можно примерно этот фрагмент на лиспе.

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен
Вход
Поиск[?]:
Гинеколог, стоматолог, психотерапевт в Донецке