Самый большой периметр треугольника - 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возвращает максимальную длину стороны треугольника.