Добрый вечер,
Я новичок в Прологе, и мне нужно решить проблему. Я пытался сделать это сам, но у меня это не работает. Я искал свои книги по Прологу за любую помощь, но ничего не нашел. Этот вопрос действительно смущает меня.
Вопрос:
Нам нужно рассчитать время раннего запуска для каждой задачи (самое раннее возможное время, когда оно может начаться, если его предварительные условия должны быть выполнены в первую очередь).
• Время раннего начала задания определяется последним ранним завершением его задания.
предпосылки.
• Последнее раннее завершение любого списка задач можно рассчитать, запустив
в ноль и последовательно принимая максимум с ранним временем финиша
каждой задачи.
• Время раннего завершения задания определяется путем добавления его продолжительности к
время раннего старта.
Написать определения в Прологе для предикатов e_start, l_e_finish, e_finish. Эти предикаты являются взаимно рекурсивными.
Задачи и их время определены следующим образом:
duration(Task, Time),
duration(b, 10),
duration(k,5),
duration(a,2).
Предпосылки определены следующим образом:
prerequisites(Task, PreqTask),
prerequisites(k,[b]),
prerequisites(b,[]),
prerequisites(a,[k]).
Я пытался решить это, но мне нужно больше объяснений о том, как это сделать правильно, потому что я просто не могу понять это правильно.
Мое решение:
e_start(Task,Start):-
prereqs(Task, X),
l_e_finish(X,Start).
l_e_finish(Task,Finish) :-
e_finish(Task,Finish),
l_e_finish(Task,Finish1),
duration(Task, Finish),
max(Finish,Task,Finish1).
e_finish(Task,Finish):-
duration(Task, Time),
e_start(Task,Finish),
Finish is Time+Finish.
Любая помощь была бы мне очень полезна. Спасибо товарищи кодеры!