2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2
 
 
Сообщение09.05.2006, 05:23 
wowec писал(а):
...Кстати, его сайт сильно хвастается, в каких крутых областях этот пролог применяется.

IBM тоже хвастался(-ась,-ись), что их VisualAge Smalltalk применяется каким-то швейцарским банком. Всвязи с чем вспомнилось, что в теории вероятностей событие с вероятностью ноль "случается чаще", чем невозможное событие.

 
 
 
 
Сообщение11.05.2006, 19:31 
Аватара пользователя
Цитата wowec
Цитата:
По поводу того, в какой последовательности изучать Пролог - тут, наверное, сколько людей, столько и мнений. Изложу своё. (Иногда заглядываю на прологовский форум 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 порядка - клаузальная форма логики предикатов - клаузы Хорна, т.к. это лежит в основе логич. программирования.

Большое спасибо за интересные и полезные интернет ссылки, мнения и рекомендации.

 
 
 
 
Сообщение25.05.2006, 18:32 
Аватара пользователя
Возможно Пролог кто-то и считает сошедшим со сцены. Однако, рекомендую обратить внимание на вполне современную технологию XSLT - язык преобразования XML.
Я, будучи хорошо знаком и с Прологом и с XSLT, могу сказть что существуют очень мощные параллели. Попробуйте например решить задачку замены в любой строке одного слэша '/' двумя '//' не имея "прологового" мышления в рекурсиях и итерациях.
Резюме, если пролог умер, то инкарнация есть! Он возродился в XSLT

 
 
 
 
Сообщение25.05.2006, 19:59 
Mick-R писал(а):
Возможно Пролог кто-то и считает сошедшим со сцены. Однако, рекомендую обратить внимание на вполне современную технологию XSLT - язык преобразования XML.
Я, будучи хорошо знаком и с Прологом и с XSLT, могу сказть что существуют очень мощные параллели. Попробуйте например решить задачку замены в любой строке одного слэша '/' двумя '//' не имея "прологового" мышления в рекурсиях и итерациях.
Резюме, если пролог умер, то инкарнация есть! Он возродился в XSLT

То, что Вы описываете, относится скорее к рекурсивному подходу, чем непосредственно к Прологу (логический вывод, метод резолюции). В этом смысле Лисп не хуже.
Кстати о реинкарнациях, фирма Ericsson в свое время создала непроцедурный язык Erlang для телекоммуникационных приложений (сейчас OpenSource). Авторы утверждают, что разработали его под влиянием Пролога.

 
 
 [ Сообщений: 19 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group