Найти произведение всех положительных элементов списка - Prolog
Формулировка задачи:
Добрый день.
Подскажите пожалуйста что я сделал не так? Необходимо перемножить все положительные элементы.
Спасибо за помощь.
Решение задачи: «Найти произведение всех положительных элементов списка»
textual
Листинг программы
domains list=integer* predicates mul(list,integer,integer). clauses mul([],Result,Result). mul([Head|Tail],Result, Counter):- NewCounter=Counter*Head, mul(Tail,Result,NewCounter). goal mul([2,-3,4,-1,2],L,1),write(L),nl,fail.
Объяснение кода листинга программы
domains- определение типа данных, которые могут использоваться в программе. В данном случае, список целых чисел (integer*).predicates- определение пользовательских предикатов, которые могут быть использованы в программе. В данном случае, предикатmul, который принимает три аргумента: список (list), результат умножения (integer), и счетчик (integer).clauses- определение правил, которые определяют поведение предикатов. В данном случае, два правила: одно для пустого списка, где результат умножения и счетчик равны результату, и второе для непустого списка, где результат умножения равен произведению текущего элемента и счетчика, а счетчик обновляется для следующего элемента списка.goal- определение цели, которую нужно достичь. В данном случае, список[2,-3,4,-1,2]умножается на 1, и результат присваивается переменнойL. Затем, результат выводится на экран и программа завершается с ошибкой (fail).