Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
Lana86

Создание нового списка путём удаления из старого нечётных элементов

18.12.2011, 14:29. Показов 3106. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Требуется написать предикат p(+V, ?L) - истинный тогда и только тогда, когда список L получается после удаления из списка V всех элементов, стоящих на нечетных местах, например,
?- p([0,a,b,c,d,e,f,g],X).
X=[a,c,e,g];
No.
Объясните как это сделать.
С большим уважением, Светлана.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.12.2011, 14:29
Ответы с готовыми решениями:

Создание нового блока и удаления старого
Есть функция <div class="cell" id="cell-<?= $cell ?>" onclick="SelectCell(this.id);" style="background-image: url(<?= $cell;...

Создание нового компонента с идентичным именем после удаления старого
LayoutMainM:=(form1.FindComponent('windows_form') as TLayout); if LayoutMainM <> nil then begin ...

Подсчет количества элементов вложенных списков из списка и создание нового списка из этих значений
Подсчет количества элементов вложенных списков из списка и создание нового списка из этих значений. То есть имеем список состоящий из...

13
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,707
Записей в блоге: 14
04.07.2014, 10:31
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
domains
syml=symbol*
int=integer
 
predicates
del_odd(syml,syml)
del_even(syml,syml)
del_odd_even(syml,int,syml)
 
clauses
del_odd_even([],_,[]).
del_odd_even([_|T],N,Q) :- N>0, M=-N, del_odd_even(T,M,Q).
del_odd_even([H|T],N,[H|Q]) :- N<0, M=-N, del_odd_even(T,M,Q).
 
del_odd(V,W) :- del_odd_even(V,1,W).
del_even(V,W) :- del_odd_even(V,-1,W).
0
Фрилансер
 Аватар для Black Fregat
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
07.07.2014, 01:40
Прошу прощения за мелочные придирки..
Но на мой взгляд обилие лишних переменных резко снижает читаемость кода..
Prolog
1
2
3
4
5
6
del_odd_even([],_,[]).
del_odd_even([_|T],0,Q) :- del_odd_even(T,1,Q).
del_odd_even([H|T],1,[H|Q]) :- del_odd_even(T,0,Q).
 
del_odd(V,W) :- del_odd_even(V,0,W).
del_even(V,W) :- del_odd_even(V,1,W).
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,707
Записей в блоге: 14
07.07.2014, 09:23
Цитата Сообщение от Black Fregat Посмотреть сообщение
Прошу прощения за мелочные придирки..
- я благодарен за "придирки", т.к. Пролог только учу.

Цитата Сообщение от Black Fregat Посмотреть сообщение
резко снижает читаемость кода
- я бы сказал "несколько снижает"
1
411 / 330 / 42
Регистрация: 10.03.2010
Сообщений: 3,313
08.07.2014, 09:50
Можно и вот так:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
domains
syml=symbol*
int=integer
 
predicates
del_odd(syml,syml)
clauses
del_odd([],[]):-!.
del_odd([A],[]):-!.
del_odd([A,B|T],[B|T1]):-del_odd(T,T1).
goal
del_odd([o,a,b,c,d,e,f,g,h],L).
Ку-ку...
0
Фрилансер
 Аватар для Black Fregat
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
09.07.2014, 05:38
Ну, если уж набирать варианты, самый прикольный так:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
domains
sl=symbol*
 
predicates
del_odd(sl, sl)
del_even(sl, sl)
 
clauses
del_odd([], []).
del_odd([_|T], TT) :- del_even(T, TT).
del_even([], []).
del_even([H|T], [H|TT]) :- del_odd(T, TT).
1
411 / 330 / 42
Регистрация: 10.03.2010
Сообщений: 3,313
09.07.2014, 13:15
Вы используете 2 предиката,а я 1,работать быстрее будет- это же рекурсия
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,707
Записей в блоге: 14
09.07.2014, 13:27
Цитата Сообщение от pavelr Посмотреть сообщение
Вы используете 2 предиката,а я 1
- так и решаем две задачи, а не одну.
0
411 / 330 / 42
Регистрация: 10.03.2010
Сообщений: 3,313
09.07.2014, 14:07
Решаем одну задачу-мой предикат ее решает независимо от количества элементов в списке безо всяких дополнительных. Рационально?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,707
Записей в блоге: 14
09.07.2014, 14:28
Вы решили одну, а мы две. Рациональность достаточно тривиальная. Если понадобятся удалять четные, Вам придется писать еще один предикат практически с той же функциональностью. А нам - нет.
0
411 / 330 / 42
Регистрация: 10.03.2010
Сообщений: 3,313
09.07.2014, 15:01
Есть же конкретная задача и под нее я написал конкретное решение, работающее эффективнее Вашего. Про домыслы "удалить четные.." автор темы не писал
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,707
Записей в блоге: 14
09.07.2014, 15:20
Однако разумное обобщение задачи всегда приветствуется... И сравнивать нужно сопоставимое.
0
Фрилансер
 Аватар для Black Fregat
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
10.07.2014, 02:45
Да, взаимная рекурсия между двумя предикатами - потеря эффективности. Я так и написал - прикольное решение. Позабавиться.

Что же касается двух оставшихся вариантов, их эффективность примерно одинакова. Не вижу повода ломать копья.
0
13 / 13 / 1
Регистрация: 24.09.2012
Сообщений: 61
07.11.2015, 10:54
Prolog
1
2
p([_, K | L], [K | L2]):- !, p(L, L2).
p(_, []).
Ссылка
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.11.2015, 10:54
Помогаю со студенческими работами здесь

"Сортировка двусвязного списка путем исключения элемента с минимальным значением и включения его в начало нового списка
Здравствуйте! Возникла проблема с программой. Тема: &quot;Сортировка двусвязного списка путем исключения элемента с минимальным значением и...

Clojure Создание третьего списка путём сложения элементов двух списков
Добрый день!)Дана такая задача Даны 2 списка, создать третий путем сложения поочередно элементов 1й элемент нового списка это сумма...

Создание нового массива из индексов старого
Дан целочисленный массив A. Сформировать массив B, поместив в него значения индексов тех элементов массива A, которые являются простыми...

Создание нового массива объектов, используя значения старого
Здравствуйте. Получаю json файл вида , &quot;key5&quot;:{ &quot;key5.1&quot;:{ ...

Создание нового домена способного работать с учетными записями старого
Здравствуйте. Помогите пожалуйста решить проблему. Парк Пк около 50 машин. Был сервер на котором держался домен. По малоприятным причинам...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru