Наибольший Общий делитель - Prolog
Формулировка задачи:
Добрвй день! !
Нужно найти НОД списка .
Всё работает только для списков как [6,9,12] ,[5,20,25], а для списка [9,18,25] выводит zero_divisor.
Помогите исправить пожалуйста . ВОт листинг
Спасибо!!
Решение задачи: «Наибольший Общий делитель»
textual
Листинг программы
div(X, 0, X) :- !. div(X, Y, D) :- R is X mod Y, div(Y, R, D). divizor([H|T], Rez) :- divizor(T, H, Rez). divizor([], Rez, Rez). divizor([H|T], R, Rez) :- div(H,R,Rn), divizor(T, Rn, Rez).
Объяснение кода листинга программы
- В начале кода стоит строка, которая говорит, что если делитель равен нулю, то результат деления равен самому делителю: div(X, 0, X) :- !.
- В следующей строке кода стоит правило, которое позволяет найти наибольший общий делитель (НОД) двух чисел: div(X, Y, D) :- R is X mod Y, div(Y, R, D).
- Далее идет определение функции divizor, которая принимает три аргумента: список чисел, результат деления и текущий элемент списка.
- Внутри функции divizor идет вызов функции div с аргументами: T (оставшаяся часть списка чисел), H (текущий элемент списка) и R (результат деления).
- Если список пуст, то результат деления равен самому делителю.
- Если список не пуст, то из него извлекается первый элемент, вызывается функция div для нахождения результата деления и вызывается функция divizor для обработки оставшейся части списка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д