Найти произведение всех положительных элементов списка - Prolog

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

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

Добрый день. Подскажите пожалуйста что я сделал не так? Необходимо перемножить все положительные элементы.
Листинг программы
  1. domains
  2. list = integer*
  3. predicates
  4. mul(list,integer)
  5. clauses
  6. mul([], r).
  7. mul([Head|Tail],[Head1|Tail1],r):-
  8. Head1 > 0.
  9. r = Head1*r.
  10. mul(Tail,r).
  11. goal
  12. mul([2,-2,3,4],NewList).
Спасибо за помощь.

Решение задачи: «Найти произведение всех положительных элементов списка»

textual
Листинг программы
  1. domains
  2. list=integer*
  3. predicates
  4. mul(list,integer,integer).
  5. clauses
  6. mul([],Result,Result).
  7. mul([Head|Tail],Result, Counter):- NewCounter=Counter*Head, mul(Tail,Result,NewCounter).
  8. goal
  9. mul([2,-3,4,-1,2],L,1),write(L),nl,fail.

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

  1. domains - определение типа данных, которые могут использоваться в программе. В данном случае, список целых чисел (integer*).
  2. predicates - определение пользовательских предикатов, которые могут быть использованы в программе. В данном случае, предикат mul, который принимает три аргумента: список (list), результат умножения (integer), и счетчик (integer).
  3. clauses - определение правил, которые определяют поведение предикатов. В данном случае, два правила: одно для пустого списка, где результат умножения и счетчик равны результату, и второе для непустого списка, где результат умножения равен произведению текущего элемента и счетчика, а счетчик обновляется для следующего элемента списка.
  4. goal - определение цели, которую нужно достичь. В данном случае, список [2,-3,4,-1,2] умножается на 1, и результат присваивается переменной L. Затем, результат выводится на экран и программа завершается с ошибкой (fail).

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


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

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

6   голосов , оценка 4.333 из 5

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

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

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