Подсчитать количество целых чисел, входящих в список только один раз - Prolog
Формулировка задачи:
Подсчитать количество целых чисел, входящих в список [6, 6, 5, 5, 4, 3, 2, 2, 1] только один раз. Список упорядочен по убыванию.
Скажите пожалуйста, для чего в предикате используются три integer и symbol,за что каждый из них отвечает?
predicates
уник(il,integer,integer,integer,symbol)
колич(il,integer)
Листинг программы
- domains
- il=integer*
- predicates
- unique(il,integer,integer,integer,symbol)
- number(il,integer)
- clauses
- number([A|L],N):- unique(L,A,0,N,first).
- number([],0).
- unique([A|L],A,C,N,_):- !,unique(L,A,C,N,repeated).
- unique([A|L],_,C,N,repeated):- !,unique(L,A,C,N,first).
- unique([A|L],_,C,N,first):- C1=C+1,unique(L,A,C1,N,first).
- unique([],_,C,N,first):- N=C+1,!.
- unique([],_,N,N,_).
- goal
- L=[6,6,5,5,4,3,2,2,1],number(L,N).
Решение задачи: «Подсчитать количество целых чисел, входящих в список только один раз»
textual
Листинг программы
- unique(_, [], 0).
- unique(A, [A|L], N) :-
- !,
- unique(A, L, N).
- unique(_, [A|L], N) :-
- unique(A, L, N1),
- N = N1+1.
Объяснение кода листинга программы
Код на языке Prolog выполняет функцию подсчёта количества уникальных элементов в списке. Список разделён на три части:
- В первой части (код unique(_, [], 0)) определены начальные значения для трёх переменных: A, L и N. Значение N инициализируется нулём.
- Во второй части (код unique(A, [A|L], N) :- ...) происходит проверка: если элемент A встречается в списке только один раз, то значение N увеличивается на единицу.
- В третьей части (код unique(_, [A|L], N) :- unique(A, L, N1), N = N1+1) происходит рекурсивный вызов функции unique для списка L и значения N1, которое инициализируется значением N увеличенным на единицу. Затем значение N присваивается N1+1. Таким образом, проходя по всем элементам списка, функция unique подсчитывает количество уникальных элементов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д