Последовательность Улама, Число вхождений элемента в список - Prolog
Формулировка задачи:
Решение задачи: «Последовательность Улама, Число вхождений элемента в список»
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).
Объяснение кода листинга программы
Инструкция inc(X,[[X,N]|T],[[X,N1]|T]) говорит о том, что если X является первым элементом списка, то увеличиваем значение N на единицу и добавляем новую пару X,N1 в список. Также есть инструкция inc(X,[H|T],[H|T1]) — если X не является первым элементом списка, то рекурсивно вызываем inc для списка T и добавляем H в начало списка T1. Инструкция p([],[]) говорит о том, что если список пустой, то результатом будет пустой список. Инструкция p([H|Tail],L):-p(Tail,T),member([H,_],T),!,inc(H,T,L) говорит о том, что если список не пустой, то мы должны рекурсивно вызвать p для списка Tail и списка T, содержащего все элементы списка, кроме последнего. Также проверяем, является ли первый элемент списка H членом списка T. Если это так, то увеличиваем значение N на единицу и добавляем новую пару H,N в начало списка L. Инструкция p([H|Tail],[[H,1]|T]):-p(Tail,T) говорит о том, что если первый элемент списка H уже присутствует в списке T, то мы просто рекурсивно вызываем p для списка Tail и списка T.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д