Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Перестановка к-го элемента в начало списка
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
andresss andresss вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.11.2007
По умолчанию 23.11.2007, 07:39

Помогите написать код... please...
Ответить с цитированием
  (#2 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,958
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 23.11.2007, 12:50

Цитата:
Помогите написать код
Вы наверное имеете в виду "написать за Вас". Однако хотелось бы чтоб и Вы участвовали.
Подсказки:
1) Вначале надо вырезать k-й элемент из списка.
2) Потом добавить вырезанный элемент в голову получившегося списка.
Эти две подзадачи просты и Вы их сами можете попробовать сделать.
Ответить с цитированием
  (#3 (permalink)) Старый
andresss andresss вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.11.2007
По умолчанию 23.11.2007, 17:39

Код:
domains
   list_int = integer*
predicates
   at_head(list_int, integer, list_int)
goal
   at_head([2,4,8,45], 7, [7, 2, 4, 8, 45]).
clauses
   at_head([], X, [X]).
   at_head(L1, X, L2):-
     L2 = [X|L1],
     write(L2).
Вот так можно переставить к-тый элемент в начало , но мне надо сделать чтобы список вводил пользователь
Ответить с цитированием
  (#4 (permalink)) Старый
Stone Stone вне форума
Member
 
Сообщений: 151
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.11.2007
По умолчанию 24.11.2007, 14:05

Как мне кажется, предикат at_head проще всего записать так.
Код:
at_head(L,X,[X|L]).
Ответить с цитированием
  (#5 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,958
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 24.11.2007, 17:01

Цитата:
Вот так можно переставить к-тый элемент в начало , но мне надо сделать чтобы список вводил пользователь
Вы написали не перестановку k-го элемента в начало списка, а простое добавление заданного элемента в список. Так что прочитайте ещё раз то, что я Вам написал, и попробуйте закодировать правильно.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Stone Stone вне форума
Member
 
Сообщений: 151
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.11.2007
По умолчанию 24.11.2007, 17:30

Винитарх
Цитата:
Подсказки:
1) Вначале надо вырезать k-й элемент из списка.
2) Потом добавить вырезанный элемент в голову получившегося списка
У меня правильно получилось? Проверал, так работают.
Код:
find_nth([],_,_) :- !,fail.
find_nth([T|L],1,T) :- !.
find_nth([T|L],N,X) :- N1 is N - 1, find_nth(L,N1,X).

at_head(L,X,[X|L]).
А как объеденить в одну прцедуру?
Ответить с цитированием
  (#7 (permalink)) Старый
andresss andresss вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.11.2007
По умолчанию 25.11.2007, 05:05

Цитата:
Вы написали не перестановку k-го элемента в начало списка, а простое добавление заданного элемента в список. Так что прочитайте ещё раз то, что я Вам написал, и попробуйте закодировать правильно.
точно - вы правы - подумаю еще...
Ответить с цитированием
  (#8 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,958
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 27.11.2007, 23:54

Цитата:
А как объеденить в одну прцедуру?
Здесь нечего объединять, т.к. написано не то, ячто надо.
Вот как надо:
Код:
domains
list=integer*
predicates
перестановка(list,integer,list)
cut_nth(list,integer,integer,list)
goal
перестановка([10,20,30,40,50],3,L).
clauses
перестановка(L,K,[E|L1]):-cut_nth(L,K,E,L1).
cut_nth([X|L],1,X,L):-!.
cut_nth([A|L],N,X,[A|L1]):-N1=N-1,cut_nth(L,N1,X,L1).
Ответить с цитированием
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить последние 3 элемента из списка flogiston Prolog 4 30.11.2011 18:41
multi, перестановка списка BAH--zer Prolog 1 11.11.2011 00:34
Необходимо добавить один элемент в начало списка katik Lisp 1 15.05.2011 14:04
Определить тип элемента списка snarkbird Prolog 1 01.12.2010 18:03
Перестановка элементов списка и вывод swdmitriy Prolog 1 05.06.2010 18:19
Вывод элемента списка с заданным номером(нумерация ведется с начала списка) Voennii-314 Prolog 3 12.12.2009 19:37
выбор элемента из списка videomag Prolog 25 29.03.2009 03:48
Перестановка первого и последнего элементов списка Cannavarov Lisp 2 21.01.2008 15:25
Перестановка двух элементов списка OksanaIST Prolog 12 25.12.2007 16:35
Перестановка элемента в списке AlexF Prolog 2 23.10.2005 21:52
Добавление нулей в конец или в начало списка silvercoin Prolog 0 09.05.2005 22:01
Перестановка элементов внутри списка CoLo Prolog 5 19.10.2004 22:38



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