Для заданного списка L построить список пар [X,N], где X - элемент L, а N - число вхождений X в L - Prolog
Формулировка задачи:
Здравствуйте, помогите, пожалуйста, разобраться в программе на Prolog! Несколько дней бьюсь все никак не доходит как она работает!
Напишите предикат p(+S,?L), который выдает список L, получающийся из списка S преобразованием каждого элемента x в пару [x, n], где n ¬ число вхождений элемента x в список S, например,
Листинг программы
- ?- p([1, 3, 5, 1, 2, 1, 3], L).
- L=[[1, 3], [3, 2], [5, 1], [2, 1]).
- Yes
- inc(X,[[X,N]|T],[[X,N1]|T]):- !,N1 is N+1.
- inc(X,[H|T],[H|T1]):-inc(X,T,T1).
- p([],[]).
- p([H|Tail],L):- p(Tail,T),member([H,_],T),inc(H,T,L),!.
- p([H|Tail],[[H,1]|T]):- p(Tail,T).
Решение задачи: «Для заданного списка L построить список пар [X,N], где X - элемент L, а N - число вхождений X в L»
textual
Листинг программы
- domains
- int=integer
- intl=int*
- intll=intl*
- predicates
- del_elt(intl,int,int,intl)
- task(intl,intll)
- clauses
- del_elt([],_,0,[]).
- del_elt([X|T],X,N,R) :- del_elt(T,X,N1,R), N=N1+1.
- del_elt([Y|T],X,N,[Y|R]) :- X<>Y, del_elt(T,X,N,R).
- task([],[]).
- task([X|T],[[X,N]|R]) :- del_elt(T,X,N1,U), N=N1+1, task(U,R).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д