Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 27.05.2019
Сообщений: 22

Какой Prolog выбрать для обучения логическому программированию (наглядный синтаксис и удобство отладки)?

27.05.2019, 20:47. Показов 1896. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.

Занялся самостоятельным изучением Prolog. Встал вопрос отладки и трассировки программы.

В TurboProlog, на котором я пока остановился по соображениям простоты синтаксиса, отладка есть через директиву trace, но результат трассировки выводится в окно шириной в 4 строки: ощущение, как будто в замочную скважину читаешь - очень неудобно.

Как это окно расширить (и можно ли вообще) в DosBox? Какие есть альтернативы? Это первый вопрос.

Второй: есть ли в Prolog универсальные средства трассировки программы, т.е. вывод логов, как printf в Си?

И третий: посматриваю в сторону Visual Prolog PE. Но смущает обилие файлов и директив непонятного назначения в шаблоне простейшего проекта и ограничения бесплатной версии. Есть ли смысл переходить? Удобней ли будет обучаться, отлаживать программу? Какие подводные камни могут встретиться при работе с этой средой? Ваше мнение.

Буду признателен за помощь.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.05.2019, 20:47
Ответы с готовыми решениями:

Какой ВУЗ выбрать для обучения программированию: МИРЭА или МАИ?
Доброго дня, уважаемые! Есть задача: выбрать из двух ВУЗов Москвы - МИРЭА или МАИ (специальность "Информатика и вычислительная...

Полезен ли наглядный стенд для обучения строению компьютера
Есть идея собирать стенды для учебных заведений (не является бизнесом, просто небольшая подработка), стенд представляет собой внутреннее...

Какой метод обучения выбрать?
Доброго времени суток форумчане. Тут у меня возник вопрос ,а каким мне методом лучше учиться программированию на C++. Погуглив нашел...

9
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
27.05.2019, 20:58
Turbo Prolog на свалку истории, однозначно
Цитата Сообщение от RoadRunner Посмотреть сообщение
отладка есть через директиву trace
В любом прологе есть
Цитата Сообщение от RoadRunner Посмотреть сообщение
Visual Prolog PE
Это, как бы, уже не совсем Пролог.. Для изучения парадигмы, боюсь, тяжеловат.

Берите SWI. Синтаксис стандартный - это ANSI-пролог
Есть на любой платформе, есть онлайн вариант - http://swish.swi-prolog.org/
1
0 / 0 / 0
Регистрация: 27.05.2019
Сообщений: 22
27.05.2019, 22:35  [ТС]
Спасибо, что напомнили про SWI, несколько лет назад с него и пытался начать..

Мне не совсем понятно, как у него дела обстоят с типизацией и доменами имен: раздела domains, как в Turbo Prolog, тут, я так понял, вообще нет. И, соответственно, не совсем понятно, как множества значений переменных в предикатах задавать. Перечислять все возможные реализации предикатов с этими переменными что ли?

Чтобы был понятен мой вопрос, такой пример: программа про обезьяну с ящиком и бананом из книги Братко "Программирование в Пролог для искусственного интеллекта", которую я попытался написать на Турбо Прологе:

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
domains
    t_gPos = indoor; atcenter; atwindow 
    t_vPos = onfloor; onbox 
    t_hasornot = has; hasnot
    t_state = state(t_gPos,t_gPos,t_vPos,t_hasornot) 
    t_act = grab; walk; push; climb
 
predicates
    step(t_state,t_act,t_state)
    canhave(t_state)
    
clauses
    step(state(atcenter,atcenter,onbox,hasnot),grab,state(atcenter,atcenter,onbox,has)).
    step(state(X1,X1,onfloor,Z),climb,state(X1,X1,onbox,Z)).
    step(state(X1,X1,onfloor,Z),push,state(X2,X2,onfloor,Z)).
    step(state(X1,Y,onfloor,Z),walk,state(X2,Y,onfloor,Z)).
    
    canhave(state(_,_,_,has)).
    canhave(S) :- step(S1,_,S),canhave(S1).
    
goal
    canhave(state(indoor,atwindow,onfloor,hasnot))
Можете подсказать, как ее на SWI переписать?

З.Ы. Буду признателен, если на ошибки укажете, если таковые имеются в программе
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
28.05.2019, 03:29
В ANSI-прологах нет статической типизации. Это как раз изобретение PDC (arlat поправит, если ошибаюсь).
Если Вам нужна статическая типизация, то единственный путь - это линейка visual Prolog.
Последний Пролог этой линейки без особых "синтакстических сахаров" - это версия 5.2
Она практически полностью совместима с Turbo Prolog: Объясните что к чему

Но я лично не вижу особых преимуществ статической типизации.

Добавлено через 5 минут
Цитата Сообщение от RoadRunner Посмотреть сообщение
Можете подсказать, как ее на SWI переписать?
Примерно один к одному раздел clauses:
Prolog
1
2
3
4
5
6
7
step(state(atcenter,atcenter,onbox,hasnot),grab,state(atcenter,atcenter,onbox,has)).
step(state(X1,X1,onfloor,Z),climb,state(X1,X1,onbox,Z)).
step(state(X1,X1,onfloor,Z),push,state(X2,X2,onfloor,Z)).
step(state(X1,Y,onfloor,Z),walk,state(X2,Y,onfloor,Z)).
 
canhave(state(_,_,_,has)).
canhave(S) :- step(S1,_,S),canhave(S1).
Но она зацикливается, и, думаю, на Turbo тоже зациклится - ибо надо проверять на возврат в прежнее состояние

Добавлено через 48 секунд
Почитайте подробнее тут: Поиск в пространстве состояний (поиск по графам тоже сюда!)
1
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
28.05.2019, 10:21
swi-prolog IDE
Для изучения парадигмы, - SWI-Prolog, - постоянно развивается, хорошая документация (в том числе онлайн, особенно быстрый поиск), много библиотек как на самом Прологе, так и внешних на С (DLL), есть возможность работать со встроенной версией. Если надо графика, своя библиотека XPCE случай непростой, лучше интегрировать с другими средами.
Собственно все можно найти на сайте swi-prolog features
При необходимости перейти на Visual-Prolog не составит труда (скорость увеличится в примерно 5-7 раз), но надо иметь ввиду, что Visual он очень относительно, а если сравнивать с Visual Studio или Delphi, то совсем не вижуал
Хотя сам я недавно начал изучать Visual-Prolog более плотно, может скоро выложу в доступ Крестики-нолики (пять в ряд) в графическом исполнении... Персональная версия для обучения вполне сгодиться, версии 5.2, 7.5 не берите, сразу на 9-ку без вариантов... Если докатитесь до реального проекта, то 300 евро за коммерчекую версию не такие уж деньги.

Добавлено через 2 минуты
по Visual Prolog есть форум как бы менее популярный, но более под него заточенный, ссылка запрещена, найдете самостоятено
1
0 / 0 / 0
Регистрация: 27.05.2019
Сообщений: 22
28.05.2019, 11:06  [ТС]
Цитата Сообщение от Black Fregat Посмотреть сообщение
Но я лично не вижу особых преимуществ статической типизации
Меня она даже сбила немного с панталыку, как я сейчас смотрю: сложилось впечатление, что Пролог без нее не будет знать какие значения куда подставлять.
Цитата Сообщение от Black Fregat Посмотреть сообщение
Но она зацикливается, и, думаю, на Turbo тоже зациклится - ибо надо проверять на возврат в прежнее состояние
Да, у меня в Турбо Прологе переполнение стека случилось, т.е. тоже зациклилось. Это не совсем понятно, т.к. по задумке там вроде от расположения утверждений зависит. В частности, если первыми идут (т.е. более предпочтительны) действия хватать (grab) и залезть (climb), а потом только передвигать ящик (push) и ходить (walk), тогда по идее решение должно быть найдено быстро.

А если в приоритете наоборот передвигать и ходить, тогда да, она просто из угла в угол будет ходить только и двигать ящик возможно до бесконечности.

Цитата Сообщение от Black Fregat Посмотреть сообщение
Есть на любой платформе, есть онлайн вариант - http://swish.swi-prolog.org/
Да, судя по всему, на этом пока и остановлюсь. Быстрее всего удалось до практической отладки добраться без рыскания по мануалам Большое спасибо.

Добавлено через 6 минут
Цитата Сообщение от arlat Посмотреть сообщение
Хотя сам я недавно начал изучать Visual-Prolog более плотно, может скоро выложу в доступ Крестики-нолики (пять в ряд) в графическом исполнении... Персональная версия для обучения вполне сгодиться, версии 5.2, 7.5 не берите, сразу на 9-ку без вариантов... Если докатитесь до реального проекта, то 300 евро за коммерчекую версию не такие уж деньги.
У меня вот тут два вопроса сразу возникает:

Первое, насколько я понял, в версии 9 просто свой код в проект как в 5.2 не вставишь. Надо разбираться со всей этой кодовой обвязкой, которая там в проекте автоматически генерится.

А второе, не пойму, чем конкретно коммерческая версия от персональной отличается?
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
28.05.2019, 11:09
Цитата Сообщение от RoadRunner Посмотреть сообщение
чем конкретно коммерческая версия от персональной отличается?
Лицензией, сообщением при старте и составом дополнительных пакетов. Движок тот же
0
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
28.05.2019, 13:46
Цитата Сообщение от RoadRunner Посмотреть сообщение
чем конкретно коммерческая версия от персональной отличается
vipPE2CE
Цитата Сообщение от RoadRunner Посмотреть сообщение
Но смущает обилие файлов и директив непонятного назначения в шаблоне простейшего проекта
Создайте новое консольное приложение, во вложении архив с примерами, для простых задач все не так уж сложно.
Цитата Сообщение от RoadRunner Посмотреть сообщение
ограничения бесплатной версии
По различию в пакетах см. выше.
В 9-ке сообщение выскакивает уже только один раз на 10-20 запусков, при частой отладке гораздо легче, чем раньше , да и Esc нажать-то не сложно. Компилирует чуть побыстрее, ну и добавлено кое-что (например именованные аргументы).
Собственно PDC и не скрывает, - Visual Prolog is a multi paradigm programming language based on the logical language Prolog.
Цитата Сообщение от RoadRunner Посмотреть сообщение
Удобней ли будет обучаться, отлаживать программу?
Обучаться вряд ли удобней, но это только лично мое мнение. Отладка в целом где-то даже лучше, можно ставить в любую точку, сразу все факты видны отдельно, переменные, но это тоже вопрос такой, обучаться лучше все-таки на ISO-Прологе.
Сам редактор кода со всякими примочками, например Ctrl+F12 переход к определению, F12 к реализации, а то с этими секциями...
Однако SWI-Prolog дает все-таки классический отладчик...
Из архива с примерами из файлов с номерами просто копировать в main.pro.
Вложения
Тип файла: rar test20190528133114.rar (7.3 Кб, 2 просмотров)
1
0 / 0 / 0
Регистрация: 27.05.2019
Сообщений: 22
28.05.2019, 16:48  [ТС]
Большое спасибо за информацию. Остальные вопросы у меня уже больше по коду, наверное, так что логично их в другой теме задать.
0
 Аватар для arlat
798 / 601 / 158
Регистрация: 07.10.2013
Сообщений: 1,330
29.05.2019, 09:27
Цитата Сообщение от RoadRunner Посмотреть сообщение
логично их в другой теме задать
Да, и желательно одна тема, один вопрос.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.05.2019, 09:27
Помогаю со студенческими работами здесь

Какой метод обучения выбрать?
Здравствуйте, только начал изучать php и сразу же возникли вопросы. Самый главный - как лучше изучать? Имеется ввиду, что проходя уроки...

Ноутбук для обучения программированию
Нужен ли мощный и дорогой ноутбук для обучения программированию? Обучение будет в Ruby. Можете ли дать параметры, по которым делать выбор?...

"1С:Предприятие 8.1 Версия для обучения программированию"
Программный продукт "1С:Предприятие 8.1 Версия для обучения программированию" предназначен для получения навыков модификации существующих и...

Книги для обучения программированию на Visual Basic
Посоветуйте, пожалуйста, какую(е) книжку лучше всего приобрести для обучения ПРОГРАММИРОВАНИЮ на Visual Basic. Прошу отнестись к вопросу...

Верный ли путь для обучения программированию с нуля?
Здравствуйте! Мне 24, имею техническое ВО (не айти и не математика). Сейчас в аспирантуре. Хочу научиться программировать, и, вероятно,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru