Форум программистов, компьютерный форум CyberForum.ru

Использование правил CLIPS в C++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.80
Digan
0 / 0 / 0
Регистрация: 17.05.2010
Сообщений: 12
22.05.2010, 18:06     Использование правил CLIPS в C++ #1
Хочу использовать базу знаний написанную на языке CLIPS в программе на C++.
Скачал нужные заголовочные файлы, подключил в проекте, в главном модуле написал #include "clips.h"
Отлично проходит компиляция и билд. Теперь загвоздка. Не могу понять как использовать саму базу знаний из файла *.clp.
Допустим есть в базе правило:
(defrule MyRule
(Myfact1 1)
(Myfact2 1)
(Myfact 3 0)
=>
(assert (Myfact 4))
)
Допустим собрал какую-то информацию с помощью программы на C++. Как теперь можно передать эту информацию в виде фактов в базу знаний для сверки с правилами и получить оттуда ответ? То есть выполняется ли по моим фактам какое-то правило.
Сколько не просматривал руководство не мог найти, куча примеров, но ни одного как использовать саму базу -в коде идет только объявление названия функции.
Может сказывается мое недостаточное знание английского.
Кстати насчет совместимости там написано следующее:
The CLIPS source code can now be compiled using either an ANSI C or C++ compiler.
Minimally, non-ANSI C compilers must support full ANSI style function prototypes and the
void data type in order to compile CLIPS. If you want to make CLIPS API calls from a C++
program, it is usually easier to do the integration by compiling the CLIPS source files as C++
files. This removes the need to make an extern "C" declaration in your C++ program for the
CLIPS APIs. Some programming environments allow you to specify the whether a file should be
compiled as C or C++ code based on the file extension. Other environments allow you to
explicitly specify which compiler to use regardless of the extension (e.g. in gcc the option “-x
c++” will compile .c files as C++ files). In some environments, the same compiler is used to
compile both C and C++ programs and the compiler uses the file extension to determine whether
the file should be compiled as a C or C++ program. In this situation, changing the .c extension of
the CLIPS source files to .cpp usually allows the source to be compiled as a C++ program.
P.S. Среда разработки Microsoft Visual C++ 2008 Express Edition.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2010, 18:06     Использование правил CLIPS в C++
Посмотрите здесь:

C++ Использование this.
Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов C++
C++ Работа с двумерными числовыми массивами. Использование указателей. Использование функций пользователя.
C/C++ Использование функций, использование break C++
Использование строк.Использование структур C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Digan
0 / 0 / 0
Регистрация: 17.05.2010
Сообщений: 12
24.05.2010, 18:10  [ТС]     Использование правил CLIPS в C++ #2
Выкладываю частично решение. Может кому пригодится. По этой теме на русском материала не нашел.
Допустим написали экспертную систему на CLIPS, сохранили. (Получается файл с расширением *.clp).
Теперь хотим выполнить эту программу не в оболочке CLIPS, а в консольном приложении на Си.
Добавляем в проект все файлы с исходным кодом из дистрибутива CLIPSSrc.
Для этого пишем примерно следующий код.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
extern "C" 
{
#include "clips.h"
}
void  main()
{
  InitializeEnvironment();//Инициализация системы CLIPS
  if(Load("MyExSys.clp")==1) //загружаем файл с экспертной системой
  {
   Reset();//
   int RulesFired;
   RulesFired=Run(-1); //-1 чтобы выполнились все возможные
   printf("Правил выполнено %d\n",RulesFired); //выводим сколько правил выполнилось
  }
 else
   printf("Файл не загружен или загружен с ошибками\n");
 
 scanf("%d");
 
}
Build, Run
Если в каком-то правиле в заключении стоит например (printout t "Hello" crlf) и это правило выполнится, то Hello выведется на экран в нашем консольном приложении.
Disconnecter
Сообщений: n/a
04.12.2010, 14:40     Использование правил CLIPS в C++ #3
Цитата Сообщение от Digan Посмотреть сообщение
Выкладываю частично решение. Может кому пригодится. По этой теме на русском материала не нашел.
Допустим написали экспертную систему на CLIPS, сохранили. (Получается файл с расширением *.clp).
Теперь хотим выполнить эту программу не в оболочке CLIPS, а в консольном приложении на Си.
Добавляем в проект все файлы с исходным кодом из дистрибутива CLIPSSrc.
Для этого пишем примерно следующий код.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
extern "C" 
{
#include "clips.h"
}
void  main()
{
  InitializeEnvironment();//Инициализация системы CLIPS
  if(Load("MyExSys.clp")==1) //загружаем файл с экспертной системой
  {
   Reset();//
   int RulesFired;
   RulesFired=Run(-1); //-1 чтобы выполнились все возможные
   printf("Правил выполнено %d\n",RulesFired); //выводим сколько правил выполнилось
  }
 else
   printf("Файл не загружен или загружен с ошибками\n");
 
 scanf("%d");
 
}
Build, Run
Если в каком-то правиле в заключении стоит например (printout t "Hello" crlf) и это правило выполнится, то Hello выведется на экран в нашем консольном приложении.
можешь со мной связаться? или пришли на мыло
8786673
sexa2004@ya.ru
My name Ri
0 / 0 / 0
Регистрация: 24.05.2015
Сообщений: 4
24.05.2015, 09:01     Использование правил CLIPS в C++ #4
а вы можете рассказать как подключить библиотеки CLIPS к QT?
Yandex
Объявления
24.05.2015, 09:01     Использование правил CLIPS в C++
Ответ Создать тему
Опции темы

Текущее время: 03:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru