Цитата:
Как я помню, Пролог задает как должна работать система перебора. Это его сила, но и его слабость. Поскольку новые исследования в этой области не могут быть использованы.
Ну почему же - вполне могут. Конечно, сам Пролог основан на поиске в глубину методом backward inference, но остальные методы поиска на нём вполне можно запрограммировать (многие даже достаточно просто)
Цитата:
А как было бы класно -- ввел закон о налогах, и половина ноши с плеч долой! все сама подсчитает
Наверное, когда-нибудь к этому всё придёт, никаких принципиальных препятствия для этого вроде не видно. Ведь написание законов - это тоже программирование (причём в основном как раз логическое. Кстати, создатели всяких теневых схем - это как раз аналоги хакеров-крякеров), и когда-нибудь формализация его постепенно дойдёт до степени возможности автоматизации.
Цитата:
Ринулся я тут пузырьковый метод сортировки реализовать на Прологе - думал, думал , так и пришлось в учебное пособие заглядывать - до конца сам не смог.
Говорят, Пролог максимально приближен к человеческому мышлению, однако со своим мышлением я этой аналогии не просматриваю.
Приближен - оно-то, конечно, так, но в то же время в Прологе имеются всякие методы повышения эффективности программ, в том числе и чисто процедурные по смыслу, применение которых значительно осложняет понимание, особенно если опыт программирования небольшой. Например, до всех нюансов применения отсечения (того, что обозначается воскл.знаком) я дошёл вовсе не на первом году изучения. Не говоря уже о студентах! Поэтому лучше осваивать помаленьку и постепенно. Что касается сортировки, то лучше начинать с медленной ("наивной") сортировки - у неё минимум процедурной семантики, т.е. программа почти чисто описательная. У всех остальных сортировок уже без процедурной семантики (т.е. осознания, что делаем вначале, а что потом, а не просто что истинно, а что ложно) не обойтись - наверное потому, что сортировка - это всё-таки алгоритм, и никуда от этого не деться.
Цитата:
Порекомендуйте примерный планчик, что в какой последовательности изучать, какие конкретно наглядные примеры использовать.
По поводу того, в какой последовательности изучать Пролог - тут, наверное, сколько людей, столько и мнений. Изложу своё. (Иногда заглядываю на прологовский форум
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 порядка - клаузальная форма логики предикатов - клаузы Хорна, т.к. это лежит в основе логич. программирования.