Помощь на экзамене Haskell + Prolog
Назначается вами
Время экзамена:
18 сентября в 10:00 ( время Москва )
Продолжительность:
2 часа
Формат экзамена:
Даются 2 задания по Haskell и 2 по Prolog
( примеры двух таких заданий - ниже )
Prolog
Топологическое устройство графа ( 3 подвопроса )
Ориентированный граф G задается с использованием списков соседей. Выясните, можно ли расположить граф G топологически, и если да, дайте список вершин в топологическом порядке.
Пример:
?- topo([a-[],b-[a,c],c-[a],d-[a,c]],Usp).
Usp=[b,d,c,a]
(a) Определите соответствующий предикат topo/2 в Прологе.
(б) Оцените временную сложность вашего решения. Обоснуйте.
(c) Являются ли какие-либо из ваших предикатов в конечном итоге рекурсивными? Если да, объясните, что это такое и что они означают. Если нет, объясните, можно ли что-то изменить таким образом.
__________
Haskell
Наибольшая сумма непрерывной подпоследовательности ( 4 подвопроса ).
а) Для данной последовательности чисел найдите непрерывный отрезок, сумма которого является наибольшей. Введите координаты начала и конца участка и достигнутую сумму.
КОД:
soucty :: Num a => [a] → (Int, Int, a)
Попробуйте какую-нибудь оптимизацию, т.е. не вычисляйте суммы перебором (полностью отдельно).
Пример: (индексируется с 0)
КОД:
> soucty [-1,1,2,3,-4]
(1,3,6)
б) Что означает часть «Num a =>» в определении функции суммы? Почему он должен быть там?
c) Укажите два возможных конкретных значения переменной и типа функции суммы.
г) Можно ли определить «Num a» также для типов пользователей, или мы должны использовать только предопределенные / встроенные? Можно ли использовать нашу функцию сумм для некоторых типов пользователей вместо «а»? (Почему да / нет?)