Удалить из списка все элементы, равные последнему; найти длину полученного списка - Prolog
Формулировка задачи:
Помогите реализовать.Создайте список и Удалите из списка все элементы, равные последнему, найдите длину оставшегося списка;
Получилось так,но это не то что мне нужно,подскажите как сделать именно по заданию? Что бы был один список и из него удалить все элементы равные последнему и посчитать длину списка?
Листинг программы
- 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).
ПОлучилось такой код сделать,но все равно не пойму как реализовать удаление элемента и потом выведение суммы списка
Листинг программы
- 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.
Решение задачи: «Удалить из списка все элементы, равные последнему; найти длину полученного списка»
textual
Листинг программы
- 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д