0 / 0 / 0
Регистрация: 25.03.2015
Сообщений: 3
1

Преобразование списка: элементы исходного списка в обратном порядке

25.03.2015, 11:38. Показов 4348. Ответов 10
Метки нет (Все метки)

Составить программу для преобразование списка l в l1. Где в l1 элементы списка l в обратном порядке. Помогите пожалуйста!!!!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2015, 11:38
Ответы с готовыми решениями:

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

Определить отношение STPR (+X, –Y), где Y элементы списка в обратном порядке
Добрый день! Помогите пожалуйста написать программу на прологе с пояснением: Определить отношение...

Напечатать элементы списка в обратном порядке и найти количество неотрицательных элементов
Дан список, объектами которого являются целые числа. Размерность списка может быть любой! ...

Функция должна возвращать список, содержащий элементы исходного списка, перечисленные в обратном порядке
Функция должна возвращать список, содержащий элементы исходного списка (в том числе входящие в...

10
Модератор
Эксперт функциональных языков программированияЭксперт Python
30002 / 16477 / 3336
Регистрация: 12.02.2012
Сообщений: 27,426
Записей в блоге: 5
25.03.2015, 12:31 2
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
domains
int=integer
intl=int*
 
predicates
conc(intl,intl,intl)
rev(intl,intl)
 
 
clauses
conc([],X,X).
conc([H|T],X,[H|Z]):-conc(T,X,Z).
 
rev([],[]).
rev([H|T],Z) :- rev(T,Q), conc(Q,[H],Z).
2
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
25.03.2015, 18:02 3
мне тут тоже захотелось набросать, получилось почти тоже самое

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class predicates
    revers:(integer* ИсходныйСписок, integer* ПеревернутыйСписок) procedure (i,o).
    addEnd:(integer* Список, integer ЭлементВКонец, integer* СписокСЭлементовВКонце) procedure (i,i,o).
 
clauses
    addEnd([],Элемент,[Элемент]).
    addEnd([Голова|Хвост1], Элемент, [Голова|Хвост2]):-
        addEnd(Хвост1, Элемент, Хвост2).
 
 
clauses
    revers([],[]).
    revers([Голова|ХвостВх],ХвостВых):-
        revers(ХвостВх,ХвостВых2),
        addEnd(ХвостВых2, Голова, ХвостВых).
1
0 / 0 / 0
Регистрация: 25.03.2015
Сообщений: 3
25.03.2015, 19:18  [ТС] 4
объясните пожалуйста как работает программа. я даже запустить её не могу . у меня turbo prolog
0
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
25.03.2015, 20:14 5
Цитата Сообщение от katekaro Посмотреть сообщение
объясните пожалуйста как работает программа. я даже запустить её не могу . у меня turbo prolog
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
% Copyright
 
implement main
    open core, console
 
class predicates
    revers:(integer* ИсходныйСписок, integer* ПеревернутыйСписок) procedure (i,o).
    addEnd:(integer* Список, integer Элемент, integer* СписокСЭлементомВКонце) procedure (i,i,o).
 
clauses
    addEnd([],Элемент,[Элемент]).
    addEnd([Голова|Хвост1], Элемент, [Голова|Хвост2]):-
        addEnd(Хвост1, Элемент, Хвост2).
 
 
clauses
    revers([],[]).
    revers([Голова|ХвостВх],ХвостВых):-
        revers(ХвостВх,ХвостВых2),
        addEnd(ХвостВых2, Голова, ХвостВых).
 
 
clauses
    run() :-
        revers([1,2,3,4],X),
        _=readline().
 
end implement main
 
goal
    console::run(main::run).
вот весь код, пробуй, у меня ничего не выводит, я делал точку останова и так смотрел что в переменной хранится
0
Фрилансер
3688 / 2057 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
26.03.2015, 02:02 6
На самом деле список элементарно перематывается в один предикат, если идти с накоплением:
Prolog
1
2
3
4
5
reverse2(L, R) :-
    reverse3(L, [], R).
reverse3([], R, R).
reverse3([H|T], A, R) :-
    reverse3(T, [H|A], R).
1
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
26.03.2015, 14:06 7
Цитата Сообщение от Black Fregat Посмотреть сообщение
reverse2
раз предикат
Цитата Сообщение от Black Fregat Посмотреть сообщение
reverse3
два предикат
0
Фрилансер
3688 / 2057 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
26.03.2015, 14:34 8
Prizrak86, обертку можно и не писать, однако. Обойтись одним reverse3. Дописать один параметр прямо в вызове.
Речь-то не совсем о том. Ваш addEnd будет мотать список на конец на каждой итерации. И сложность возрастет на порядок.
1
52 / 52 / 18
Регистрация: 20.03.2015
Сообщений: 278
26.03.2015, 14:55 9
Цитата Сообщение от Black Fregat Посмотреть сообщение
Prizrak86, обертку можно и не писать, однако. Обойтись одним reverse3. Дописать один параметр прямо в вызове.
Речь-то не совсем о том. Ваш addEnd будет мотать список на конец на каждой итерации. И сложность возрастет на порядок.
это точно, матает он часто
0
0 / 0 / 0
Регистрация: 25.03.2015
Сообщений: 3
27.03.2015, 12:14  [ТС] 10
Цитата Сообщение от Catstail Посмотреть сообщение
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
domains
int=integer
intl=int*
 
predicates
conc(intl,intl,intl)
rev(intl,intl)
 
 
clauses
conc([],X,X).
conc([H|T],X,[H|Z]):-conc(T,X,Z).
 
rev([],[]).
rev([H|T],Z) :- rev(T,Q), conc(Q,[H],Z).
А как проверить работу программы. Делаю в goal:conc([1,2,3,4],X,Y) Ничего не выводит. Turbo Prolog
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
30002 / 16477 / 3336
Регистрация: 12.02.2012
Сообщений: 27,426
Записей в блоге: 5
27.03.2015, 12:27 11
Надо так:

Prolog
1
2
3
4
goal 
 
conc([1,2,3,4],[5,6],X), write(X),nl.  %% проверка conc
rev([1,2,3,4,5],X),, write(X),nl.  %% проверка rev
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2015, 12:27

Удалить из списка все парные элементы и поместить их в конец списка в обратном порядке
Доброго времени суток, уважаемие форумчани, помогите Создать список L , элементами которого...

Удалить из списка все отрицательные элементы и поместить их в конец списка в обратном порядке
Пожалуста, помогите решить задачку: Составит программу, которая создает список L елементами...

Вывести элементы односвязного списка в обратном порядке
подскажите, пожалуйста, как вывести элементы односвязного списка в обратном порядке?

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


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

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

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