Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2013, 13:16   #1
java_shkiper
Пользователь
 
Регистрация: 27.02.2013
Сообщений: 11
По умолчанию Prolog. Клонирование списка.

Необходимо написать свой предикат для клонирование списка(поэлементное добавление элементов в конец из одного списка в другой, новый).
По началу подумал, всё просто, но не получилось почему-то.
Вот мои пробы кода :
ну предикат добавления элемента в конец списка:
add(E,[],[E]).
add(E,[H|T],[H|T1]):-add(E,T,T1).
собственно, сам предикат для клонирования:
clone([],_).
clone([H|L], S) :- add(H, S, S1), clone(L, S1).
но не работает ...
java_shkiper вне форума Ответить с цитированием
Старый 13.10.2013, 13:50   #2
java_shkiper
Пользователь
 
Регистрация: 27.02.2013
Сообщений: 11
По умолчанию

это нормальное решение или быдлокодерское
%слияние 2-х списков
append([],L,L):-!.
append([H|T],P,[H|Y]):-append(T,P,Y).

clone([],M,M):-!.
clone([H|T],L,List):- clone(L,[H],L2),
clone(T,L2,List).
java_shkiper вне форума Ответить с цитированием
Старый 13.10.2013, 16:29   #3
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

проблема решилась?
я не пойму что в последнем посте у вас не так.
rrrFer вне форума Ответить с цитированием
Старый 13.10.2013, 16:43   #4
java_shkiper
Пользователь
 
Регистрация: 27.02.2013
Сообщений: 11
По умолчанию

проблема решилась, просто мучает вопрос плохое ли решение, много строк занимает думаю
java_shkiper вне форума Ответить с цитированием
Старый 13.10.2013, 19:15   #5
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Ну так то да, говнокод тот еще.
Что тут происходит я в корне не понимаю:
Код:
clone([H|T],L,List):- clone(L,[H],L2),
clone(T,L2,List).
Если вы пытались сделать это:
Цитата:
Необходимо написать свой предикат для клонирование списка(поэлементное добавление элементов в конец из одного списка в другой, новый).
то выглядеть оно должно так примерно:
Код:
p([],[]):-!.
p([H|T],[H|R]):-p(T,R).
или я что-то не понимаю?
rrrFer вне форума Ответить с цитированием
Старый 13.10.2013, 20:57   #6
java_shkiper
Пользователь
 
Регистрация: 27.02.2013
Сообщений: 11
Радость

спасибо огромное вам, это лучше выглядит решение, то просто основано на слиянии списков и каждый раз создаётся новый список с одним элементом
java_shkiper вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Prolog.Сортировка списка KLOP Помощь студентам 3 23.12.2012 22:35
Удалить элементы из списка.PROLOG Mediaplay Помощь студентам 0 11.12.2012 19:43
Удаление из списка. Turbo Prolog Ketty_byyy Помощь студентам 1 23.05.2010 15:19
Prolog (Выбор по условию из списка) nata Помощь студентам 1 06.05.2010 13:27
[Prolog] Преобразование списка в таблицу girlll Помощь студентам 1 07.04.2009 23:29