Вверх ↑
Ответов: 2059
Рейтинг: 132
#1: 2014-12-03 22:59:37 ЛС | профиль | цитата
Была задачка, которая плохо решалась не только на кубиках, но и на дельфи.
Даже в IC получалось громоздко...
Прицепил пролог к Дельфи и написал всё в IC для дельфи.
Решил - не пропадать добру.
Попробовал перевести всё в компоненты.
Вот чего получилось:
https://yadi.sk/d/3u6nu7ifdACae
Пока проба пера.
Нет компонентов:
Функции и параметры предикатов;
Преобразование строк и термов;
Создание типов Пролога;
Получение значения термов Пролога;
Работа с функторами;
Работа со списком;
Работа с потоками.
Собственно они сделаны, нужно оформить. Иконки там. Подумать, какие точки лишние, или не хватает итд.
+ unit, чтобы писать в IC в коде дельфи.
Собственно, а оно кому нужно?
Пояснения:
Кто не знает с чем его едят - http://www.mari-el.ru/mmlab/home/prolog/study_l.html
Диалект полностью совпадает с amzi пролог - http://www.amzi.com/ , тут и docs.
!!! Скомпилированные базы знаний *.xpl от amzi не подходят, и пытаться не надо!!!

В архиве два компонента. Устанавливать как обычно.
Файл Prolog.pas кинуть в ..\Elements\delphi\code\.
clear.xpl - Пустая база. Нужна для работы. Должна находиться с вашей программой.
database.pro и example.pro собственно примеры программ. Загружаем и играемся.
Так как парсера входного текста нет, то предложение вводится одной строкой.
prove( Attr is Value and Rest ) :-
getav(Attr, Value),
prove(Rest). Это не правильно.

prove( Attr is Value and Rest ) :-getav(Attr, Value),prove(Rest). Это правильно.
По той же причине и комментарии
% The rest of the code is the custom inference engine. Given
% the goal of 'proving' an attribute value pair, the system - Не работают.
Двуспальные и более вопросы задаются через doExecQuery.
Вот так gizmo(a,X),easy(X). , а не так ?-gizmo(a,X),easy(X).
Односпальные и через кнопку "???" и "All" - все возможные варианты ответов и через кнопку "?=1/0".
Вроде всё подробно рассказал.
ЗЫ.
Промахнулся темой.
Надо в тему Делаем компоненты.
карма: 6

2
Голосовали:andrestudio, Minkovsky