Форум программистов, компьютерный форум, киберфорум
Наши страницы
Prolog
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
Sanot
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 24
1

Задачка со списками Prolog

11.04.2012, 16:03. Просмотров 1255. Ответов 14
Метки нет (Все метки)

Помогите, пожалуйста решить задачку! Есть список, например [1,2,1,3,2,1] нужно написать предикат, который исключит последнее вхождение введенного символа. То есть если мы ввели символ 2 то в результате будет список [1,2,1,3,1] (без 2 последней).
P.S. знаю как это сделать с помощью реверса, но хотелось бы попроще.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2012, 16:03
Ответы с готовыми решениями:

Prolog. Работа со списками
У кого-нибудь есть какие-то идеи насчет этой задачи? :) Или хотя бы натолкните,...

Задача со списками (SWI-Prolog)
Доброго времени суток, Есть 2 задачи на списки: 1. Разделить список на две...

Помогите со списками (Visual Prolog)
Доброго времени суток. Если кто может, помогите, пожалуйста реализовать: 1)...

Работа со списками (Turbo Prolog 2.0)
Срочно нужна помощь с задачкой по прологу. Зачет на носу. все задачи решила, а...

Работа со списками в Turbo Prolog
Доброго времени суток тем кто посетил этот топ. Дело собственно вот в чем: ...

14
Грымзик
2481 / 1457 / 35
Регистрация: 14.09.2009
Сообщений: 2,742
11.04.2012, 17:02 2
Да, можно и попроще
Prolog
1
2
del([H|Tail],E,[H|Tail1]):-del(Tail,E,Tail1),!.
del([E|Tail],E,Tail).
Не будет работать, если в списке вообще не встречается искомый элемент. Для решения этого надо писать вспомогательный предикат.
1
Sanot
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 24
11.04.2012, 17:22  [ТС] 3
Грымзик, спасибо=)) А про какой Вы имели ввиду предикат вспомагательный?
0
Грымзик
2481 / 1457 / 35
Регистрация: 14.09.2009
Сообщений: 2,742
11.04.2012, 17:25 4
Ну вот сами подумайте как сделать, чтобы пустые списки тоже обрабатывались?
1
Sanot
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 24
11.04.2012, 17:26  [ТС] 5
По идее:
del([],_[]).

Но так не работает...
0
Грымзик
2481 / 1457 / 35
Регистрация: 14.09.2009
Сообщений: 2,742
11.04.2012, 17:33 6
Так действительно не работает, потому что программа будет всегда вызывать 1е правило, пока не дойдет до пустого списка, и тогда удачно завершится это самое del([],_,[]). Вот я и говорю, что нужен вспомогательный предикат, который рассматривает пустой ли список, и только в противном случае вызывает del.
1
Sanot
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 24
11.04.2012, 17:35  [ТС] 7
А Вы не могли бы помочь, если это не отнимет у Вас времени?
0
Грымзик
2481 / 1457 / 35
Регистрация: 14.09.2009
Сообщений: 2,742
11.04.2012, 17:43 8
Могла, но не буду. Я помогаю только тем, кто сам что-то делает. Вот и продемонстрируйте свои попытки, пусть даже не рабочие, тогда помогу.
1
Sanot
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 24
11.04.2012, 17:48  [ТС] 9
=))
Могу написать предикат, который проверяет принадлежность элемента списку! но не понимаю можно ли их как-нибудь связать с этим предикатом??? Возможно не в правильном направлении иду=(
0
Грымзик
2481 / 1457 / 35
Регистрация: 14.09.2009
Сообщений: 2,742
11.04.2012, 17:52 10
Обратите внимание на
Цитата Сообщение от Грымзик Посмотреть сообщение
Вот я и говорю, что нужен вспомогательный предикат, который рассматривает пустой ли список, и только в противном случае вызывает del.
1
Sanot
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 24
11.04.2012, 17:59  [ТС] 11
Запутался...

Добавлено через 3 минуты
А зачем нам проверять пустой список или нет? Нужно ведь знать элемент принадлежит списку или нет, а затем к del! разве не так?
0
Грымзик
2481 / 1457 / 35
Регистрация: 14.09.2009
Сообщений: 2,742
11.04.2012, 18:07 12
Упс, а Вы правы =) Пустой список тут надо как частный случай рассматривать. Если искомый элемент не принадлежит списку, то del вернет false. Тогда надо так: пробуем вызвать del, если он удачно завершается, все ок, а если же нет, то возвращается исходный список.
1
Sanot
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 24
11.04.2012, 18:12  [ТС] 13
Вот это то как раз и не понятно!!!
0
Грымзик
2481 / 1457 / 35
Регистрация: 14.09.2009
Сообщений: 2,742
11.04.2012, 18:25 14
Ааааааааааа, ну чего тут может быть непонятного?
Prolog
1
2
superdel(List,E,Ans):-del(List,E,Ans),!.
superdel(List,_,List).
1
Sanot
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 24
11.04.2012, 18:32  [ТС] 15
А как сделать эту проверку??? -)

Добавлено через 4 минуты
Спасибо! Не ругайтесь=)) я новичок! Буквально 2 недели изучаю! Огромное спасибо! Буду дальше заниматься!
0
11.04.2012, 18:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2012, 18:32

Работа со списками в Visual Prolog 7.2
Доброго времени. После пары суток бесплодного поиска, обращаюсь к вам за...

Работа со списками в Prolog (задача на отрезки; есть наработки)
Здравствуйте! Изучаю пролог недавно, и передо мной встала следующая задача:...

Основные предикаты для работы со списками [GNU Prolog]
Сформулируйте основные предикаты для работы со списками - принадлежит_списку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru