По поводу того, в какой последовательности изучать Пролог - тут, наверное, сколько людей, столько и мнений. Изложу своё. (Иногда заглядываю на прологовский форум
http://progz.ru/forum/viewforum.php?f=10, там частенько обсуждаются вопросы его оптимального изучения и преподавания, но все они выглядят для меня какими-то слишком высокими материями. Наверное, для тех, у кого Пролог основной рабочий инструмент, а не дополнительный (как у меня), мир выглядит по-другому). Во-первых, заведите себе книжек (классикой являются Клоксин-Меллиш, Братко, и Стерлинг-Шапиро, все есть в инете): например,
http://dstu2204.narod.ru/3sem/lp/bratko.cab, или посмотрите на
http://progz.ru/forum/viewtopic.php?t=11193, на lib.org.by тоже кое-что есть. Мне в своё время книжка Братко здорово помогла. Изучение, по-моему, лучше начинать с чисто логических вещей, убрав всё процедурное (ввод-вывод, отсечение, динамическое добавление-удаление предложений и т.п.). Поначалу даже лучше и без рекурсии обойтись. Например, рассмотреть задачку типа построения таблиц истинности формул логики высказываний: на базе логических связок с заданными таблицами
'не'(0,1).
'не'(1,0).
'или'(0,0,0).
'или'(0,1,1).
'или'(1,0,1).
'или'(1,1,1).
и т.п. построить таблицу истинности при помощи заданной формулы, например,
'->'(X,Y,Result) :- 'не'(X,NotX), 'или'(NotX,Y,Result).
или помоделировать задачки из анализа логических схем (типа задаём сигналы на входе и смотрим, что будет на выходе или наоборот). Ещё пример - поиск команд в таблице чемпионата по какому-нибудь критерию (типа запросов на выборку в sql).
2. добавить рекурсию. Типичные задачи: программа "родственные отношения" (есть во всех книжках и в инете), программа поиска пути по карте каких-нибудь транспортных маршрутов или схеме метро (пока без нахождения пути, а просто найти ответ на вопрос: до каких пунктов можно с пересадками добраться из заданного).
3. рассмотреть понятие составного терма ("структуры"). Здесь примеры на символьную арифметику: дифференцирование, упрощение, раскрытие скобок и т.п.
4. Списки. Теперь можно добавлять нахождение пути по карте с занесением этого пути в список. Ну и всякие простые операции со списками: member, конкатенация, обращение, etc. Кстати задача Эйнштейна.
5. Численные расчёты: вычисление факториала, чисел Фибоначчи и т.п.
6. Основы процедурной семантики (программа "большой, тёмный" из книжки Братко), отсечение. Только самые простые и необходимые вещи типа добавления отсечения в вычисление факториала, чтобы не было переполнения стека. По опыту, студенты коммерческого вуза процедурную семантику не понимают даже после 1 семестра изучения (а многие - и вообще никогда), поэтому лучше их этим сильно не грузить - только самое необходимое.
7. Метод решения задач "поиск в пространстве состояний". Программа "обезьяна и банан". На эту тему могу дать учебный пример генератора расписаний занятий.
8. Форматированный вывод, файловый ввод-вывод.
9. Динамическое добавление-удаление предложений программы. "Самообучающийся факториал", динамическая СУБД.
10. Метапредикаты (not, =.. , call, functor, clause, etc.)
11. Предикаты высших порядков (bagof, setof, findall).
Ну по ходу процесса будет видно: возможно, что-то надо копать глубже, а что-то вообще опустить.
Наверное, параллельно надо проходить какие-то теоретические основы (например, минут по 10 в начале каждой лекции). По крайней мере, по-моему, обязательно следующее: логика высказываний - логика предикатов 1 порядка - клаузальная форма логики предикатов - клаузы Хорна, т.к. это лежит в основе логич. программирования.
Большое спасибо за интересные и полезные интернет ссылки, мнения и рекомендации.