13 нояб. 2013 г.

Обработка результата Пролог вычислений

Результат выполнения Пролога нужен разработчику для дальнейшей обработки.

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

Почему таблица?

  • Можно использовать в запросах.
  • Можно подключать все существующие контролы.
Временные таблицы уровня транзакции -- идеальные кандидаты на эту роль. Если мы придем к единой структуре для хранения результата на все случаи жизни, то можно ввести набор таких таблиц в эталонную бд.

2 комментария:

Unknown комментирует...

С созданием клиент датасета – да; с ручной перегонкой – не обязательно – есть метод ExtractData.
Можно добавить что-нибудь типа RunData, - вызов одного и того же предиката с разными аргументами согласно датасету. Это будет запрос только по первому решению для каждого вызова ( вполне приемлемо для задания перечня входных данных), а также в датасете необходимо предусмотреть специальное поле для хранения результата запроса (успех/неудача).

Unknown комментирует...

Не обязательно результаты вычислений, здесь уместнее рассуждать про взаимодействие с объектом вектора термов (TgsPLTermv), который предназначен для передачи и получения значений аргументов предиката по типу данных.
Исходя из этого, вручную это делается или с применением таблиц и методов, должна быть известна спецификация вектора термов. Данная спецификация должна соответствовать методам PutX и ReadX объекта TgsPLTermv.
Таким образом, при проектировании сервисных таблиц и методов (либо скрипт-функций), также как и при использовании клиент датасета, необходимо задавать определенную спецификацию данных.
Например, вызов сервисных скрипт-функций для взаимодействия объектов TgsPLTermv и Scripting.Dictionary может выглядеть следующим образом:
1. pl_DictToTermv(Dict_in, Array("i:P1", "i:P2", "d:P3", "s:P4"), Tv_in)
2. pl_TermvToDict(Tv_out, Array("P1", "P2", "d:P5", "d:P6", "P7", "P8"), Dict_out)
В первом случае, кроме передачи ссылок на объекты, задается массив, содержащий спецификацию по типу данных и имена ключей; во втором, - спецификацию по именам ключей и обязательным указанием на тип данных date (прочие типы данных однозначно определяются с помощью свойства TermType объекта TgsPLTermv).

Отправить комментарий