С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Prolog
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
LexxRnD
0 / 0 / 0
Регистрация: 26.12.2014
Сообщений: 2
1

Задача со списками (SWI-Prolog)

26.12.2014, 14:04. Просмотров 811. Ответов 2
Метки нет (Все метки)

Доброго времени суток,
Есть 2 задачи на списки:
1. Разделить список на две части так, чтобы они состояли из всех последовательных элементов исходного списка и имели примерно одинаковый размер, например: [a, b, c, d, e] -> [a, b, c], [d, e]

2. Перемешать элементы двух списков друг с другом в порядке их следования, например: [a, b, c, d, e], [1, 2, 3] -> [a, 1, b, 2, c, 3, d, e]

По первой задаче накопал, тут же на форуме, разбиение списка с чётным количеством элементов на 2 списка, а как реализовать с нечетным количеством не могу понять..
Prolog
1
2
3
sep(L,A,B):-length(L,N),N1 is N/2,sep(N1,L,A,B).
sep(0,B,[],B).
sep(N,[H|Tail],[H|TailA],B):-N>0,N1 is N-1,sep(N1,Tail,TailA,B).
По второй долго ковырял, но так и не смог понять как ему передавать элементы по очереди..
Думаю что как-то связано с головой списка, т.е. передавать голову первого списка в пустой результирующий список, потом голову второго списка, а что дальше - хз.. Может как-то голову удалить, и соответствено перезаписать остаток списка как новый, а потом по новой голову в конец результирующего списка..

В прологе новичок совсем.
Подскажите в какую сторону двигаться?
Заранее спасибо.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2014, 14:04
Ответы с готовыми решениями:

Задача SWI prolog
Подскажите, пожалуйста, как можно решить эту задачу? База данных содержит...

Задача на Swi-Prolog
Здравствуйте. В общем появилась проблема. Никогда не изучал пролог. И вот дали...

Логическая задача на SWI Prolog
Задали решить логическую задачу посредством языка пролог, лог задачи: На...

Логическая задача swi prolog
База данных содержит факты вида ученик(имя, класс) и увлекается(имя, хобби)....

Списки в SWI-Prolog. Задача
Добрый день! Помогите, пожалуйста, решить задачу на SWI-Prolog. Задание:...

2
Black Fregat
2634 / 1365 / 378
Регистрация: 31.05.2009
Сообщений: 5,170
26.12.2014, 15:15 2
Лучший ответ Сообщение было отмечено LexxRnD как решение

Решение

1) Поставьте в первом правиле N1 is N div 2 вместо N1 is N/2. Если Вам важно, чтобы именно первая половина была больше второй, поставьте N1 is (N-1) div 2 +1.

2) Подсказка: от списка можно отделить сразу несколько элементов:
Prolog
1
2
3
4
zames(L, [], L).
zames([], L, L).
zames([H1|L1], [H2|L2], [H1,H2|L]) :-
    zames(L1, L2, L).
1
LexxRnD
0 / 0 / 0
Регистрация: 26.12.2014
Сообщений: 2
26.12.2014, 15:25  [ТС] 3
Спасибо, сейчас попробую.

Добавлено через 9 минут
Black Fregat, вы гений!
а я заморачивался с пустым списком, в который сливал головы списков, пока на одной из итераций, то подобие цикла что у меня было не ушло в глубокую рекурсию...

Огромное спасибо!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2014, 15:25

Задача сетевого планирования SWI Prolog
Написал программу из книги Ивана Братко по решению задачи сетевого...

SWI-Prolog, Шахматная задача, Конь
Доброго времени суток. Столкнулся с "классической" задачей, о которой все...

Задача Прима-Краскала (SWI-Prolog)
Дана страна (плоская и в ней n городов). Нужно соединить города телефонной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru