Подсчитать количество целых чисел, входящих в список только один раз - Prolog

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

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

Подсчитать количество целых чисел, входящих в список [6, 6, 5, 5, 4, 3, 2, 2, 1] только один раз. Список упорядочен по убыванию.
Листинг программы
  1. domains
  2. il=integer*
  3. predicates
  4. unique(il,integer,integer,integer,symbol)
  5. number(il,integer)
  6. clauses
  7. number([A|L],N):- unique(L,A,0,N,first).
  8. number([],0).
  9. unique([A|L],A,C,N,_):- !,unique(L,A,C,N,repeated).
  10. unique([A|L],_,C,N,repeated):- !,unique(L,A,C,N,first).
  11. unique([A|L],_,C,N,first):- C1=C+1,unique(L,A,C1,N,first).
  12. unique([],_,C,N,first):- N=C+1,!.
  13. unique([],_,N,N,_).
  14. goal
  15. L=[6,6,5,5,4,3,2,2,1],number(L,N).
Скажите пожалуйста, для чего в предикате используются три integer и symbol,за что каждый из них отвечает? predicates уник(il,integer,integer,integer,symbol) колич(il,integer)

Решение задачи: «Подсчитать количество целых чисел, входящих в список только один раз»

textual
Листинг программы
  1. unique(_, [], 0).
  2. unique(A, [A|L], N) :-
  3.     !,
  4.     unique(A, L, N).
  5. unique(_, [A|L], N) :-
  6.     unique(A, L, N1),
  7.     N = N1+1.

Объяснение кода листинга программы

Код на языке Prolog выполняет функцию подсчёта количества уникальных элементов в списке. Список разделён на три части:

  1. В первой части (код unique(_, [], 0)) определены начальные значения для трёх переменных: A, L и N. Значение N инициализируется нулём.
  2. Во второй части (код unique(A, [A|L], N) :- ...) происходит проверка: если элемент A встречается в списке только один раз, то значение N увеличивается на единицу.
  3. В третьей части (код unique(_, [A|L], N) :- unique(A, L, N1), N = N1+1) происходит рекурсивный вызов функции unique для списка L и значения N1, которое инициализируется значением N увеличенным на единицу. Затем значение N присваивается N1+1. Таким образом, проходя по всем элементам списка, функция unique подсчитывает количество уникальных элементов.

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


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

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

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

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

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

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