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

Предикат определения множества объединения двух списков

25.05.2015, 17:27. Показов 2076. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста с заданием:
Создать предикат определения множества объединения двух списков.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.05.2015, 17:27
Ответы с готовыми решениями:

Создать предикат определения множества пересечения двух списков
хеееелп ми Создать предикат определения множества пересечения двух списков

Определить предикат для объединения элементов двух списков, находящихся в диапазоне от N1 до N2
Друзья, здравствуйте! Подскажите пожалуйста, как решить поставленную задачу: "Определить предикат для объединения элементов двух...

Создать предикат нахождения множества объединения трех множеств
Создать предикат нахождения множества объединения трех множеств с вводом списков с клавиатуры

10
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,724
Записей в блоге: 14
28.05.2015, 09:41
Имеется в виду, что каждый список есть множество (т.е. состоит из уникальных элементов)?
0
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 15
28.05.2015, 11:51  [ТС]
Да.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,724
Записей в блоге: 14
28.05.2015, 12:35
Вот один из способов:

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
domains
int=integer
intl=int*
 
predicates
app(intl,intl,intl)
memb(int,intl)
setof(intl,intl)
union(intl,intl,intl)
 
clauses
app([],X,X).
app([H|T],X,[H|Y]) :- app(T,X,Y).
 
memb(_,[]) :- fail.
memb(H,[H|_]) :- !.
memb(H,[_|T]) :- memb(H,T).
 
setof([],[]).
setof([H|T],[H|Q]) :- not(memb(H,T)), setof(T,Q).
setof([H|T],Q)     :- memb(H,T), setof(T,Q).
 
union(X,Y,Z) :- app(X,Y,T), setof(T,Z).
Добавлено через 4 минуты
Но это решение избыточно. Если исходные списки уже являются множествами, то проще так:

Prolog
1
2
3
uni([],X,X).
uni([H|T],X,[H|Y]) :- not(memb(H,X)), uni(T,X,Y).
uni([H|T],X,Y)     :- memb(H,X), uni(T,X,Y).
0
5 / 5 / 0
Регистрация: 04.10.2015
Сообщений: 30
27.11.2015, 17:09
а можно как-то реализовать только объединение 2-х списков без оператора отсечения?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,724
Записей в блоге: 14
27.11.2015, 17:34
innnochka, объединение (app) не использует отсечения...
0
5 / 5 / 0
Регистрация: 04.10.2015
Сообщений: 30
27.11.2015, 17:46
а она именно и выполняет задачу из 2 списков создать 3-ий который есть их объединение?
т.е. вводим: [1,2,4,5] и [1,2,3,6]. выводит: [1,2,3,4,5,6]
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,724
Записей в блоге: 14
27.11.2015, 18:05
innnochka, нет, у тебя объединение множеств. app([1,2,4,5],[1,2,3,6],R) даст R=[1,2,4,5,1,2,3,6]
0
5 / 5 / 0
Регистрация: 04.10.2015
Сообщений: 30
27.11.2015, 18:08
Не могли бы вы помочь с такой программой?
т.е. надо еще написать проверку есть ли символ из 2 списка уже есть в первом, то тогда его надо добавить только 1 раз в итоговый список..
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38180 / 21115 / 4307
Регистрация: 12.02.2012
Сообщений: 34,724
Записей в блоге: 14
28.11.2015, 23:08
innnochka, так это все уже было решено.
0
5 / 5 / 0
Регистрация: 04.10.2015
Сообщений: 30
29.11.2015, 09:29
вCatstail, в функции memb используется оператор отсечения. Возможно ли написать программу без этого оператора?
Prolog
1
2
3
memb(_,[]) :- fail.
memb(H,[H|_]) :- !.
memb(H,[_|T]) :- memb(H,T).
Добавлено через 21 минуту
Prolog
1
2
3
4
5
6
7
8
9
10
11
app([],X,X).
app([H|T],X,[H|Y]) :- app(T,X,Y). 
 
memb(H, [ H | _ ] ) .
memb( Elem, [ _ | T ] ):-memb(Elem, T ).
 
setof([],[]).
setof([H|T],[H|Q]) :- not(memb(H,T)), setof(T,Q).
setof([H|T],Q)     :- memb(H,T), setof(T,Q).
 
union(X,Y,Z) :- app(X,Y,T), setof(T,Z).
вот,готово) этот код и дает ответ на мою задачу, где нет оператора отсечения вообще)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.11.2015, 09:29
Помогаю со студенческими работами здесь

Создать предикат нахождения объединения пересечения первых двух множеств с третьим
Создать предикат нахождения множества, которое получается в результате выполнения следующих действий с тремя множествами А∩В∪С

Создайте предикат, поэлементно перемножающий соответствующие элементы двух одноуровневых списков
Создайте предикат, осуществляющий поэлементное перемножение соответствующих элементов двух исходных одноуровневых списков, результатом...

Предикат. Сумма элементов двух списков наиболее близка к заданному чилу
p(X, Y, Q, -S) X и Y - упорядоченные по возрастанию списки, Q - число Предикат истинный тогда и только тогда, когда S есть сумма...

Список: Используя предикат принадлежности элемента списку, разработать функцию, находящую объединение двух списков.
Используя предикат принадлежности элемента списку разработать функцию находящую теоретико-множественное объединение двух списков. Вход:...

Определить предикат выполняющий арифметическую операцию над элементами двух числовых списков равной длины
Здравствуйте! Помогите написать предикат на прологе. Определите предикат make(Op,L1,L2,R), создающий список R с помощью выполнения...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru