Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Сортировка списка списков.
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
compasses compasses вне форума
Member
 
Сообщений: 44
Сказал(а) спасибо: 1
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 25.02.2014
По умолчанию Сортировка списка списков. - 01.10.2014, 09:23

Здравствуйте!
Решаю задачи из 99 prolog problems
задача на сортировку списка списков.
Хотел сделать так:
ищем по длинне минимальный подсписок, запоминаем его позицию, удаляем этот элемент из главного списка, записываем в новый.
Проблема возникла в "ищем по длинне минимальный подсписок" - не могу понять, как мне надо сделать, чтобы возвращался номер элемента.
Реализовывал так:
prolog Код:
lsort(List, [X|Result]) :- getMinElementNumber(List, ElementNumber, 1),  remove_at(X, List, ElementNumber, ReuseList), lsort(ReuseList, Result).
getMinElementNumber([H1,H2|T], _, K) :- length(H1, Size1), length(H2, Size2), Size1 < Size2, K1 is K +1,
    getMinElementNumber([H2|T], K, K1).
getMinElementNumber([H1,H2|T], _, K) :- length(H1, Size1), length(H2, Size2), Size1 >= Size2, K1 is K +1,
    getMinElementNumber([H2|T], K1, K1).
getMinElementNumber([_], ElementNumber, _) :- !.
вызываю так:
getMinElementNumber([[a,b,c],[d,e],[f,g,h],[d,e],[i,j,k,l],[m,n],[o]], ElementNumber, 1)
Пролог-машина в ответ пишет true, вместо ожидаемого мной ElementNumber = 7.
Подскажите, что я делаю не так?
Использую swi prolog.

Последний раз редактировалось compasses; 01.10.2014 в 09:27
Ответить с цитированием
  (#2 (permalink)) Старый
compasses compasses вне форума
Member
 
Сообщений: 44
Сказал(а) спасибо: 1
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 25.02.2014
По умолчанию 01.10.2014, 09:27

Возник второй вопрос. Глянул решение.
Вот оно:
prolog Код:
lsort(InList,OutList,Dir) :-
   add_key(InList,KList,Dir),
   keysort(KList,SKList),
   rem_key(SKList,OutList).

add_key([],[],_).
add_key([X|Xs],[L-p(X)|Ys],asc) :- !,
    length(X,L), add_key(Xs,Ys,asc).
add_key([X|Xs],[L-p(X)|Ys],desc) :-
    length(X,L1), L is -L1, add_key(Xs,Ys,desc).

rem_key([],[]).
rem_key([_-p(X)|Xs],[X|Ys]) :- rem_key(Xs,Ys).
Объясните пожалуйста, что значит L-p(X)???
в хэлпе swi prolog не нашел метода -p. Что это значит?
Ответить с цитированием
  (#3 (permalink)) Старый
compasses compasses вне форума
Member
 
Сообщений: 44
Сказал(а) спасибо: 1
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 25.02.2014
По умолчанию 01.10.2014, 13:47

Свою задачу решил. Сортировку написал. Где у меня ошибка разобрался. Ответьте, кто знает, по поводу второго вопроса.
Ответить с цитированием
  (#4 (permalink)) Старый
arlat arlat вне форума
Member
 
Аватар для arlat
 
Сообщений: 218
Сказал(а) спасибо: 0
Поблагодарили 16 раз(а) в 15 сообщениях
Регистрация: 18.12.2009
Адрес: Минск
По умолчанию 01.10.2014, 14:20

'-' это структура, 'p' тоже, тут с этим минусом немного путаница
т.е. L is -L1 здесь арифметика, а L-p(X) структура -(L, p(X)), применили её для использования в keysort
Ответить с цитированием
Пользователь сказал cпасибо:
compasses (01.10.2014)
  (#5 (permalink)) Старый
compasses compasses вне форума
Member
 
Сообщений: 44
Сказал(а) спасибо: 1
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 25.02.2014
По умолчанию 01.10.2014, 14:36

понял. спасибо.
Ответить с цитированием
Ads.
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка списка списков по первому параметру time_to_go_on Prolog 15 29.05.2014 14:47
Упаковщик. Преобразование списка в список списков. MadCrank Prolog 4 25.12.2011 01:11
сортировка списка Natashka89 Prolog 11 11.11.2011 02:50
Сортировка списка в SWI-Prolog 111q Prolog 4 19.05.2011 16:39
Построение списка списков malaja Lisp 2 01.04.2009 16:01
Сортировка списков imported_W_M Prolog 5 14.10.2008 08:26
сортировка списка из файла NoOne Prolog 5 20.05.2008 16:27
интересная сортировка списка toshkaexe Prolog 11 07.01.2007 22:32
Сортировка двусвязного списка Dr.IK Вопросы начинающих программистов 2 08.07.2005 12:25
Сортировка списка MAGistr Prolog 0 26.05.2005 13:35
Сортировка списка на приложении ЛолА С/С++ 1 14.05.2005 05:48
Сортировка списка VolanD С/С++ 8 16.06.2004 03:50



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов