2 / 2 / 2
Регистрация: 21.10.2015
Сообщений: 214
1

Удалить из списка все элементы, равные последнему; найти длину полученного списка

12.10.2016, 20:03. Показов 1507. Ответов 5
Метки нет (Все метки)

Помогите реализовать.Создайте список и Удалите из списка все элементы, равные последнему, найдите длину оставшегося списка;

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
domains
list_string=string*
predicates
has(string,list_string)
general(list_string,list_string,list_string)                    
clauses 
has(X,[X|_]):-!.
has(X,[_|Y]):-has(X,Y).
general([],_,[]):-!.
general([H|T1],L2,[H|T3]):-general(T1,L2,T3),has(H,L2),not(has(H,T3)),!.
general([_|T1],L2,L3):-general(T1,L2,L3).
goal
general(["0","1","3","3","4","4","5","6","7","2"],["3","0","8","2","4","6","6","5"],List).
Получилось так,но это не то что мне нужно,подскажите как сделать именно по заданию? Что бы был один список и из него удалить все элементы равные последнему и посчитать длину списка?

Добавлено через 5 часов 5 минут
ПОлучилось такой код сделать,но все равно не пойму как реализовать удаление элемента и потом выведение суммы списка
Prolog
1
2
3
4
5
6
7
8
9
10
11
DOMAINS
list = integer*
PREDICATES
member(integer, list)
CLAUSES
member(X,[X|_]):-write("yes"),!.
member(X,[]):-write("no"),!.
member(X,[_|L]) :- member(X, L).
GOAL
L=[1,2,3,4], write(L),nl, write("X="),readint(X),
member(X, L),nl.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2016, 20:03
Ответы с готовыми решениями:

Удалить из списка все элементы равные последнему
domains i=integer ii=i* predicates last(i,ii) _del_last(ii,ii,ii) del_last(ii,ii) clauses

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

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

Удалить все элементы двунаправленного списка равные 10
Создать двунаправленный список, ввести элементы. Из введенных элементов удалить все, равные 10....

5
2 / 2 / 2
Регистрация: 21.10.2015
Сообщений: 214
13.10.2016, 21:25  [ТС] 2
По немногу двигаюсь,идет удаление только одного элемента равного последнему,а ну жно что бы все элементы равные последнему удаляло,после посчитать сумму.
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DOMAINS
list = integer*
PREDICATES
member(integer, list)
nondeterm del(integer,list,list)
CLAUSES
member(X,[X|L]):-!.
member(X,[_|L]):-member(X,L).
del(X,[X|L],L):-!.
del(X,[X|L],[X|L1]):-del(X, L,L1).
 
GOAL
X=4,
L=[4,1,4,3,4],member(4,L),
del(X,L,L1).
0
775 / 579 / 156
Регистрация: 07.10.2013
Сообщений: 1,301
14.10.2016, 10:21 3
Цитата Сообщение от Vovcik0 Посмотреть сообщение
Создайте список и Удалите из списка все элементы, равные последнему, найдите длину оставшегося списка
Хорошее задание, особенно, если добавить ограничение реализации в одну рекурсию.
Миниатюры
Удалить из списка все элементы, равные последнему; найти длину полученного списка  
0
775 / 579 / 156
Регистрация: 07.10.2013
Сообщений: 1,301
14.10.2016, 10:49 4
Ну, тогда и вариант без отсечения
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
len_del_last1(Xs, Ys, Len) :-
    len_del_last1(Xs, [_Z], Ys, Len).
 
len_del_last1(Xs, Xs, [], 0).
len_del_last1([X, Y | Xs], Zs, Ys1, Len1) :-
    len_del_last1([Y | Xs], Zs, Ys, Len),
    len_del_last1_gen(X, Zs, Ys, Ys1, Len, Len1).
 
len_del_last1_gen(X, [X], Ys, Ys, Len, Len).
len_del_last1_gen(X, [Z], Ys, [X | Ys], Len, Len1) :-
    X \= Z,
    Len1 is Len + 1.
Ну, может немного перемудрил...
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
len_del_last2(Xs, Ys, Len) :-
    len_del_last2(Xs, _Z, Ys, Len).
 
len_del_last2([X], X, [], 0).
len_del_last2([X, Y | Xs], Z, Ys1, Len1) :-
    len_del_last2([Y | Xs], Z, Ys, Len),
    len_del_last2_gen(X, Z, Ys, Ys1, Len, Len1).
 
len_del_last2_gen(X, X, Ys, Ys, Len, Len).
len_del_last2_gen(X, Z, Ys, [X | Ys], Len, Len1) :-
    X \= Z,
    Len1 is Len + 1.
1
2 / 2 / 2
Регистрация: 21.10.2015
Сообщений: 214
14.10.2016, 16:59  [ТС] 5
arlat, у меня visual prolog,это не такой код.
0
Фрилансер
3701 / 2073 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
15.10.2016, 01:35 6
Цитата Сообщение от Vovcik0 Посмотреть сообщение
у меня visual prolog,это не такой код.
На самом деле не так уж много нужно переделать
1) опишите предикаты
2) замените is на =
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2016, 01:35
Помогаю со студенческими работами здесь

Удалить из списка все элементы, равные трем
помогите сделать удаление надо чтоб было удаление всех списков имеющие число 3

Найти элементы списка, равные 6 и удалить их
Создать однонаправленный список, добавить элементы вывести на экран. Найти элементы равные 6 и...

Удалить все элементы, равные последнему
"Удалить все элементы, равные последнему". Надо сделать на паскале, а я только в борланде до этого...

Удалить из списка элемент, найти длину оставшегося списка
Подскажите, как удалить элемент и найти длину оставшегося списка? domains i=integer il=i*...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru