Самый большой периметр треугольника - Prolog
Формулировка задачи:
Доброго времени суток. Необходимо написать правило, находящее три точки, образующие треугольник с максимальным периметром. Как это осуществитть и с чего начать? Нужно осуществить не тупым наглым перебором вcех сторон.
Решение задачи: «Самый большой периметр треугольника»
textual
Листинг программы
max( X, Y, X ):– X >= Y. max( X, Y, Y ):– X < Y. maxlist( [ X ], X ). maxlist( [ X, Y | TAIL ], MAX ) :– maxlist( [ Y | TAIL ], MAXTAIL ), max( X, MAXTAIL, MAX ).
Объяснение кода листинга программы
В этом коде рекурсивно применяется два шаблона, чтобы найти максимальную длину стороны треугольника.
max( X, Y, X )
- этот шаблон проверяет, является лиX
наибольшим значением среди трех переданных параметров. Если это так, он возвращаетX
. Если нет, он вызывает себя снова, передавая два меньших значения в качестве новых параметров.max( X, Y, Y )
- этот шаблон проверяет, является лиY
наибольшим значением среди трех переданных параметров. Если это так, он возвращаетY
. Если нет, он вызывает себя снова, передавая два меньших значения в качестве новых параметров. Затем применяетсяmaxlist
, который является оберточным шаблоном, чтобы рекурсивно применятьmax
ко всем элементам списка.maxlist( [ X ], X )
- если список содержит только один элементX
,maxlist
возвращаетX
.maxlist( [ X, Y | TAIL ], MAX )
- если список содержит больше одного элемента,maxlist
рекурсивно применяет себя к оставшейся части спискаTAIL
, используяMAX
как текущий максимум. Затем он вызываетmax
сX
иMAX
в качестве параметров, чтобы обновитьMAX
в случае, еслиX
больше текущего максимума. В итоге,maxlist
возвращает максимальную длину стороны треугольника.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д