Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Помогите! Нужна прога на Prolog'e


Автор: anykat 2.5.2006, 22:19
Очень нужна программа на Прологе, которая ищет последний элемент списка и меняет его с первым.
Заранее благодарна... 

Автор: Ivan Kolesnikov 23.5.2006, 14:43
Вот можно так попробовать:
Код

/* 
  Сначала научимся отделять от списка последний элемент
  last(Список, Последний элемент, Список без последнего элемента)
*/
last([LastItem|T], LastItem, []) :- T=[].
last([FirstItem|T], LastItem, [FirstItem|NewList]) :- not(T=[]), last(T, LastItem, NewList).

/*
  Добавляет элемент в конец списка
  addLast(Список, Элемент, Новый список)
*/
addLast([], X, [X]).
addLast([H|T], X, [H|L]) :- addLast(T, X, L).

/*
  Меняет местами первый и последний элементы списка
  move(Старый список, Новый список)
*/
move([X], [X]).
move(Li, [LastItem|L]) :- last(Li, LastItem, [FirstItem|CenterList]), addLast(CenterList, FirstItem, L).

Правда может быть я изобрел велосипед и есть готовые функции для поиска последнего элемента, и для добавления в конец

P.S. Проверял на SWI-Prolog вродебы работает smile 

Автор: Pankon 26.5.2006, 16:53
Код

Goal:move([1,2,3,4,5], Rez)


move([First|T], [Last|Rez]) :- doMove(T, First, Last, Rez).

doMove([Last], First, Last, [First]).
doMove([H|T], First, Last, [H|Rez]):-doMove(T, First, Last,  Rez).


Тоже должно работать  smile 

 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)