|
Исчисление предикатов
|
|||
---|---|---|---|
#18+
Требуется совет. Задача состоит разработке программы для проверки корректности заполнения множества полей перед закрытием логистического контракта. Поля проверяются в зависимости от условий, например, поле А проверяется в случае DDP контракта и не проверяется для других типов. Или поле B проверяется для всех типов поставляемого оборудования кроме ... Изначально я написал просто с помощью условных операторов, затем бизнес-правила изменили и сразу стало понятно, что будут несколько раз менять и впредь. Очевидное решение: сами условия проверки задавать в виде данных (литеральных констант или в таблице БД). Удалось унифицировать условия. Теперь они выглядят как множество предикатов примерно такого вида: поле F проверяется, если аргумент A1='...', аргумент А2= всегда, аргумент A3 = кроме '...'. Все просто здорово, но вот проблема - для одного поля могут быть определены несколько предикатов с пересекающимися областями действия аргументов. Прямо классическая задачка для Пролога, но у меня обычный PL/SQL, в котором нет механизма логического вывода. Сейчас я указал вручную порядок исчисления предикатов, но это как то не красиво. Хотелось бы универсального решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2006, 12:09 |
|
Исчисление предикатов
|
|||
---|---|---|---|
#18+
Интересная тема.. Я использую иногда в проектах tuProlog ( на Java) tuProlog . Делал когда-то свой free проект под него с Ораклом - DRE . У меня была мысль попытаться "засунуть" его в Oracle DB Aurora Java, но не стал этим заниматься. Возможно, что эта тема до сих пор актуальна ? -- Еще Вам можно посоветовать использовать какие-либо стандартизированные java библиотеки для rete алгоритмов ( например rule engine for java ),но это опять -таки не PLSQL конечно. Хотя возможно что их тоже можно "засунуть" в Oracle DB Aurora Java.. Черт его знает, может начиная с Oracle 9.2.0 это и можно сделать.. ( плохо что у Oracle своя версия java, - поганцы.. ) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2006, 12:45 |
|
Исчисление предикатов
|
|||
---|---|---|---|
#18+
У меня сделано для проводочного механизма так: есть таблица условий вида (код условия, русское описание условия, условие в терминах бд, картинка условия). Например, 1, Сделка по продаже, operation = 2 2, Логическое И, and Далее для конкретной проводки есть строковое поле "Условие" и "Картинка условия", для формирования которого есть отдельный пользовательский интерфейс, который выгребает все условия. Пользователь рисует условия визуально, программа делает длинную строку и картинку условия, которую система сохраняет в БД. При изменении условия картинка пересоздается заново. При определении нужности проводки система для каждого объекта, по которому делаются проводки, прогоняет по нему это условие. Делается все это через dbms_sql. Это решение очень гибкое и главное позволяет пользователям менять условия или писать супер-навороченные условия программистам. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2006, 12:59 |
|
Исчисление предикатов
|
|||
---|---|---|---|
#18+
Кое-что насчет совмести с Sun Java - Oracle9i Java Stored Procedures Developer s Guide (тут рабочая ссылка на free проект Oracle + Java + Prolog - DRE ) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2006, 13:00 |
|
Исчисление предикатов
|
|||
---|---|---|---|
#18+
pan159..Прямо классическая задачка для Пролога, но у меня обычный PL/SQL, в котором нет механизма логического вывода... Еще мысль подумал.. Если у вас эта задача решается не в базе, а в Формсах, то к ним можно прицепить EJB на Java с rete алгоритмом или java-prolog.. К формсам вроде можно на стандарте sun- java приделывать ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2006, 13:21 |
|
Исчисление предикатов
|
|||
---|---|---|---|
#18+
Да, в Формсах 6i, но в клиент-серверном режиме. Очень благодарен всем за советы. Подключение Prolog-движка потребует определенного времени на эксперименты. Точно займусь этим, но вот в этом ли проекте? Надо оценить временные затраты и срок до окончания :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2006, 13:58 |
|
|
start [/forum/topic.php?fid=33&msg=33560794&tid=1549462]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
191ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 239ms |
total: | 513ms |
0 / 0 |