Отчет оформляется каждым студентом самостоятельно и содержит номер, название, цели и задачи лабораторной работы, задание и результаты реализации (листинг программы, схемы, контрольный пример, результаты), ответы на контрольные вопросы.
Контрольные вопросы.
1. Реализуйте на языке Пролог алгоритмы прохождения бинарных деревьев в прямом и обратном порядке.
2. В результате выполнения целевого утверждения find(X, [1, 2, 3]) переменная X примет следующие значения:
X=1
X=2
X=3
Если поменять местами правила для предиката find следующим образом:
find(Elem, [_|Tail]):-find(Elem, Tail).
find(Elem, [Elem|_]).
то в результате выполнения целевого утверждения find(X, [1, 2, 3]) переменная X примет следующие значения:
X=3
X=2
X=1
Объясните, почему изменился порядок нахождения решений.
3. Реализуйте на языке Пролог алгоритм слияния двух отсортированных списков.
4. Реализуйте на языке Пролог рекурсивный и итерационный алгоритмы определения длины списка.
5. Дан плоский замкнутый многоугольник {P1, P2, ..., Pn}. Требуется найти площадь ориентированного многоугольника. Площадь вычисляется с помощью линейного интеграла 1/2 ò xdy – ydx, где интегрирование производится по границе многоугольника. Решением данной задачи является приведенная ниже программа, задающая отношение area(Chain, Area). Chain является списком координат вершин. Значением переменной Area будет площадь многоугольника с данными вершинами.
area([Tuple], 0).
area([(X1, Y1), (X2, Y2)|XYs], Area):-
area([(X2, Y2)|XYs], Area1),
Area=(X1*Y2-Y1*X2)/2+Area1.
Площадь положительна, если многоугольник обходится против часовой стрелки, и отрицательна в противном случае.
Перепишите приведенную выше программу так, чтобы она стала итерационной.