Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
 Как такое записать на прологе?  [new]
mayton
Member

Откуда: loopback
Сообщений: 49745
Пишу сведенья по метатадам и провадерам в свой файлик. Такой себе свод знаний. Ну не просто текстовый файлик
а такой чтоб впоследствии можно было какой-то вопрос задать и получить ответ.

Провайдеры:
provider(zebra).
provider(begemot).
provider(donkey).

source(FTP).
source(S3).
source(oracle).

Рулы.

Праймари датасорс для бегемота - БД.
А для всех остальных - файловое хранилище.

primarysource(X, oracle) :-
{
   return X == begemot;
}


primarysource(X, s3) :-
{
   return X != begemot;
}

Вот как такое описать? Или лучше в виде 1 правила.
30 окт 19, 11:20    [22005814]     Ответить | Цитировать Сообщить модератору
 Re: Как такое записать на прологе?  [new]
mayton
Member

Откуда: loopback
Сообщений: 49745
Вместо того чтоб описывать факты.

primarysource(zebra, oracle).
primarysource(begemot, S3).
primarysource(donkey, S3).
.... тут еще куча однотипных будет....
30 окт 19, 18:35    [22006432]     Ответить | Цитировать Сообщить модератору
 Re: Как такое записать на прологе?  [new]
mayton
Member

Откуда: loopback
Сообщений: 49745
Как AND задать?

(Использую SWI-Prolog.)

|: attr_code_issuer(X) :- attr(X, code) & attr(X, issuername).

ERROR: user://2:1025:37: Syntax error: Operator expected
|: attr_code_issuer(X) :- attr(X, code) && attr(X, issuername).

ERROR: user://2:1028:37: Syntax error: Operator expected
|: attr_code_issuer(X) :- attr(X, code) and attr(X, issuername).

ERROR: user://2:1031:37: Syntax error: Operator expected
|:
1 ноя 19, 18:49    [22008396]     Ответить | Цитировать Сообщить модератору
 Re: Как такое записать на прологе?  [new]
ZyK_BotaN
Member

Откуда: Новгород-Северский
Сообщений: 109978
mayton
Как AND задать?

емнип. ЭНД - через запятую.
ОР - через точку с запятой.

но лет 7 как пролога не видел, могу путать.
1 ноя 19, 21:14    [22008497]     Ответить | Цитировать Сообщить модератору
 Re: Как такое записать на прологе?  [new]
mayton
Member

Откуда: loopback
Сообщений: 49745
О. Шикарно. Проверю чуть позже. Щас с телефона.
1 ноя 19, 21:56    [22008515]     Ответить | Цитировать Сообщить модератору
 Re: Как такое записать на прологе?  [new]
mayton
Member

Откуда: loopback
Сообщений: 49745
Да. Так работает.

attr(a, code).
attr(a, issuername).

attr(b, code).

attr(c, issuername).

code_and_iss(X) :- attr(X, code) , attr(X, issuername).
code_or_iss(X) :- attr(X, code) ; attr(X, issuername).


А как быть с предикатом primarysource?
2 ноя 19, 13:10    [22008682]     Ответить | Цитировать Сообщить модератору
 Re: Как такое записать на прологе?  [new]
tchingiz
Member

Откуда:
Сообщений: 38142
mayton,
Вот это с тобой приключилось, прямо нет слов.
2 ноя 19, 23:12    [22008874]     Ответить | Цитировать Сообщить модератору
 Re: Как такое записать на прологе?  [new]
mayton
Member

Откуда: loopback
Сообщений: 49745
Не переживай. Это - факультатив и нет deadlines.
2 ноя 19, 23:19    [22008876]     Ответить | Цитировать Сообщить модератору
 Re: Как такое записать на прологе?  [new]
tchingiz
Member

Откуда:
Сообщений: 38142
Ок, денег, упс, ответов нет, но ты крепись
Я уже с 93 года в пролог ни ногой
2 ноя 19, 23:34    [22008879]     Ответить | Цитировать Сообщить модератору
 Re: Как такое записать на прологе?  [new]
dimonz80
Member

Откуда:
Сообщений: 235
каноничная книженция
3 ноя 19, 13:50    [22009004]     Ответить | Цитировать Сообщить модератору
 Re: Как такое записать на прологе?  [new]
mayton
Member

Откуда: loopback
Сообщений: 49745
Уже вот чисто по SWI-prolog.

С таким правилом

field(X, Y) :- attr(X, Y) ;  dim(X, Y) ;  prop(X, Y).


Спрашиваю систему - обладает ли провадер zebra полем code.
Фактически - да. У зебры есть атрибут attr(eq,code).

?- field(eq,code).
true .

?-

Но после нажатия enter получаю ответ true - и input блокируется ожидая что я еще раз нажму ENTER.

И после этого печатается символ "." и я система показывает промпт к следующему вопросу.

Как отключить этот эффект?
5 ноя 19, 15:17    [22010001]     Ответить | Цитировать Сообщить модератору
 Re: Как такое записать на прологе?  [new]
mayton
Member

Откуда: loopback
Сообщений: 49745
Хм.. Как distinct сделать?

Много фактов подходят под поиск. Мне надо комактный отчот получить.
6 ноя 19, 19:25    [22011062]     Ответить | Цитировать Сообщить модератору
 Re: Как такое записать на прологе?  [new]
Partisan M
Member

Откуда:
Сообщений: 1396
mayton
Как такое записать на прологе?


Лучше никак. Prolog давно не существует и никогда не имел практического применения.
Узнайте, какие современные программные средства подойдут для вашей задачи.
7 ноя 19, 14:51    [22011583]     Ответить | Цитировать Сообщить модератору
 Re: Как такое записать на прологе?  [new]
mayton
Member

Откуда: loopback
Сообщений: 49745
Теоретически подходят графовые БД. Типа SPARQL.
Но запросы к таким системам писать 3.14дец как неудобно.

Пролог привлекает лаконичностью.
7 ноя 19, 14:56    [22011589]     Ответить | Цитировать Сообщить модератору
 Re: Как такое записать на прологе?  [new]
tchingiz
Member

Откуда:
Сообщений: 38142
mayton


Пролог привлекает лаконичностью.

первые две недели, пролог менятоже привлекал лаконичностью, но потом выработали во мне стойкое убеждение, что чтолибо длиннее 100 строчек на нем, невозможно отладить
9 ноя 19, 09:54    [22012680]     Ответить | Цитировать Сообщить модератору
 Re: Как такое записать на прологе?  [new]
mayton
Member

Откуда: loopback
Сообщений: 49745
А ларчик то просто открывался. Distinct он и в Африке distinct.

https://www.swi-prolog.org/pldoc/man?predicate=distinct/1

distinct(Goal) :-
    findall(Goal, Goal, List),
    list_to_set(List, Set),
    member(Goal, Set).
22 ноя 19, 21:18    [22023297]     Ответить | Цитировать Сообщить модератору
 Re: Как такое записать на прологе?  [new]
mayton
Member

Откуда: loopback
Сообщений: 49745
Еще поинт.

Есть у меня один могильничек исходничек (3.5 тысячи строк). Он содержит базу фактов онтологии крупной инфо-системы.
База - получена искусственно мной путем переноса мета-данных из прикладной системы в prolog.

Собсно что я хочу. Я хочу, посмотрев примеры экспертных систем на Прологе построить несколько своих
сценариев диалога когда пользователь что-то спрашивает у система а она ему отвечает.
Насполько я понял - запрашивается цель (goal).

При этом предполагается что пользователь этой системы - не программист а бизнес-аналитик или дата аналитик.

Что предполагается хранить.
- провайдеры
- equities
- dept (bond)
- company/ownership (и атрибуты)
- indices
- measures (факты верхнего уровня)
- куча всякой технгической инфы по мета-дате. А имеено из какого поля
какого провайдера инфа въехала в систему. Формат. Тип (если дата - то какой
формат. Если валюта то какая. Если страна то какая).

Что предполагается извлекать. Хм. Над этим я щас думаю. Онтология предполагает знание фактов верхнего уровня.
Тоесть я не буду хранить сведенья по конкретной акции а скорее буду информировать о том как вообще эта акция
заехала в систему. Из какого провайдера.

На задание пока нету сроков. Это investigation по возможностям.
23 ноя 19, 17:32    [22023626]     Ответить | Цитировать Сообщить модератору
 Re: Как такое записать на прологе?  [new]
mayton
Member

Откуда: loopback
Сообщений: 49745
Чорт с ними с провайдерами. Пока не хватает сноровки. Особенно с тривиальными вопросами.
Отладка и ввод вывод.
25 ноя 19, 23:56    [22025113]     Ответить | Цитировать Сообщить модератору
Все форумы / Программирование Ответить