Для заданного списка L построить список пар [X,N], где X - элемент L, а N - число вхождений X в L - Prolog

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, помогите, пожалуйста, разобраться в программе на Prolog! Несколько дней бьюсь все никак не доходит как она работает! Напишите предикат p(+S,?L), который выдает список L, получающийся из списка S преобразованием каждого элемента x в пару [x, n], где n ¬ число вхождений элемента x в список S, например,
Листинг программы
  1. ?- p([1, 3, 5, 1, 2, 1, 3], L).
  2. L=[[1, 3], [3, 2], [5, 1], [2, 1]).
  3. Yes
  4. inc(X,[[X,N]|T],[[X,N1]|T]):- !,N1 is N+1.
  5. inc(X,[H|T],[H|T1]):-inc(X,T,T1).
  6. p([],[]).
  7. p([H|Tail],L):- p(Tail,T),member([H,_],T),inc(H,T,L),!.
  8. p([H|Tail],[[H,1]|T]):- p(Tail,T).

Решение задачи: «Для заданного списка L построить список пар [X,N], где X - элемент L, а N - число вхождений X в L»

textual
Листинг программы
  1. domains
  2. int=integer
  3. intl=int*
  4. intll=intl*
  5.  
  6.  
  7. predicates
  8. del_elt(intl,int,int,intl)
  9. task(intl,intll)
  10.  
  11. clauses
  12. del_elt([],_,0,[]).
  13. del_elt([X|T],X,N,R) :- del_elt(T,X,N1,R), N=N1+1.
  14. del_elt([Y|T],X,N,[Y|R]) :- X<>Y, del_elt(T,X,N,R).
  15.  
  16. task([],[]).
  17. task([X|T],[[X,N]|R]) :- del_elt(T,X,N1,U), N=N1+1, task(U,R).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы