Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 18
1

Обработка списков

14.12.2015, 12:58. Просмотров 566. Ответов 2
Метки нет (Все метки)

Даны два непустых списка целых чисел L1 и L2. Создать программу, которая строит список L3, содержащий все различные пары [X1, X2], в которых X1 - элемент L1, расположенный на нечетном месте, X2 - элемент L2, и разность X1 и X2 равна 1. Запрос: R(L1, L2, L3).

Не могу сделать данное задание. Не получается объединять элементы из каждого списка в общий 3й список. Пока вот что есть(просто выводит элементы, которые подходят по условию):

Prolog
1
2
r([A,_|T1],[B|T2],L):-((A-B)=:=1;(B-A)=:=1),print(A),tab(1),print(B),tab(1),r(T1,T2,L).
r([A,_|T1],[B|T2],L):-(A-B)=\=1,(B-A)=\=1,r(T1,T2,L).
Также есть функция, которая добавляет элемент в конец списка:

Prolog
1
2
add([],X,[X]).
add([H|T],X,[H|Res]):-add(T,X,Res).
Я понимаю, что нужно их объединить, но не могу сделать это.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2015, 12:58
Ответы с готовыми решениями:

Обработка списков
Помогите пожайлуста!!! Задание: 1. Создать список, состоящий из значений первых аргументов...

Обработка списков
Помогите, пожалуйста, с задачей. Необходимо определить новые предикаты, которые работают со...

Обработка списков
Список состоит из букв и цифр, буквы оставить без изменения, а цифры умножить на 2.

Обработка списков
В коде, в строке head_list(list). появилась ошибка No clauses for this predicate. Но...

2
Модератор
26235 / 13652 / 2591
Регистрация: 12.02.2012
Сообщений: 22,379
14.12.2015, 18:36 2
У меня получилось что-то вроде:

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
domains
int=integer
intl=int*
intll=intl*
 
predicates
 
plist(int,intl,intll)
cart(intl,intl,intll)
append(intll,intll,intll)
odd_pos(intl,intl)
filter(intll,intll)
cmpl(intl,intl)
delall(intll,intl,intll)
uniq(intll,intll)
task(intl,intl,intll)
 
clauses
 
plist(_,[],[]).
plist(X,[H|T],[[X,H]|Z]) :- plist(X,T,Z).
 
append([],X,X).
append([H|T],X,[H|Y]) :- append(T,X,Y).
 
cart([],_,[]).
cart([H|T],Y,Z) :- plist(H,Y,R), cart(T,Y,ZZ), append(R,ZZ,Z).
 
odd_pos([],[]).
odd_pos([H],[H]).
odd_pos([H,_|T],[H|Z]) :- odd_pos(T,Z).
 
filter([],[]).
filter([[H1,H2]|T],[[H1,H2]|Z]) :- filter(T,Z), abs(H1-H2)=1.
filter([[H1,H2]|T],Z) :- filter(T,Z), abs(H1-H2)<>1.
 
cmpl([H1,H2],[H1,H2]).
 
delall([],_,[]).
delall([H|T],H,Z) :- delall(T,H,Z).
delall([U|T],H,[U|Z]) :- not(cmpl(H,U)), delall(T,H,Z).
 
uniq([],[]).  
uniq([H|T],[H|Z]) :- delall(T,H,TT), uniq(TT,Z). 
 
task(X,Y,R) :- odd_pos(X,XX), cart(XX,Y,U), filter(U,RR), uniq(RR,R).
0
0 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 7
30.01.2016, 11:43 3
Catstail,не могли бы Вы мне помочь с решением задачи,не знаю,как с Вами связаться.Очень надеюсь на вашу помощь.
Задачана пролог)
Разделить список из строк на два: в один поместить строки, состоящие из одной буквы, в другой – все остальные.
Найти количество тех элементов первого списка, значение которых совпадает с символом «в».
Заменить первые символы элементов второго списка пробелами.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2016, 11:43

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Рекурсивная обработка списков
Напишите предикат, находящий минимальный и максимальный элементы списка.

Обработка соответствующих элементов двух списков и формирование третьего
Даны два списка одинаковой длины. Получить третий список, каждый элемент равен 1, если элементы...

Обработка списков: вводы, разность, получение длины и сортировка [Arity]
помогите с прогой на Arity prolog?! организовать ввод и формирование двух символьных списков.Найти...

Определить, какой из списков меньше (как по значениям элементов, так и по длинам подсписков и самих списков)
Даны списки списков чисел l1 и l2. Определить, какой из списков меньше (как по значениям...


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

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

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