Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбиение списка 
V
    Опции темы
Coderr
Дата 17.11.2010, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 27.1.2006
Где: Vesnet

Репутация: нет
Всего: 0



Здравствуйте!
Поставлена следующая задача:
«Определите отношение разбиениесписка( Список, Список1, Список2)
так, чтобы оно распределяло элементы списка между двумя списками Список1 и Список2 и чтобы эти списки были примерно одинаковой длины.
Например: разбиениесписка( [а, b, с, d, e], [a, с, е], [b, d]).»

Написал следующий код:
Код

add([],L,L).
add([X|L1],L,[X|L2]):-add(L1,L,L2).
explode([],[],[]).
explode([X],[X],[]).
explode([X,Y|Tail],L1,L2):-add(L1,X,L1),add(L2,Y,L2),explode(Tail,L1,L2).


Задаю команду в SWI-Prolog ?- explode([a,b,c,d,e],X,Y). — получаю бесконечный цикл. Что не так?

Это сообщение отредактировал(а) Coderr - 17.11.2010, 12:27
--------------------
Кодинг - это стиль жизни!   
PM WWW ICQ   Вверх
Фантом
Дата 17.11.2010, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 6
Всего: 49



Во-первых, у Вас явно какая-то путаница с определением и вызовом предиката add (какой из аргументов чем является?). Во-вторых, в Прологе нет переменных в нормальном смысле слова, поэтому конструкция вроде add(L1,X,L1) не поменяет значение L1 - она вызовется для известных L1 и X и будет пытаться доказывать, что такой предикат истинен.

Кроме этого, никакой add тут вообще не нужен. Можно сделать так:
Код

explode([],[],[]).
explode([X],[X],[]).
explode([X,Y|Tail],[X|L1],[Y|L2]):-explode(Tail,L1,L2).

PM   Вверх
Coderr
Дата 18.11.2010, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 27.1.2006
Где: Vesnet

Репутация: нет
Всего: 0



Спасибо большое за помощь! =)
--------------------
Кодинг - это стиль жизни!   
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума Prolog
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Prolog | Следующая тема »


 




[ Время генерации скрипта: 0.0388 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.