0 / 0 / 0
Регистрация: 17.05.2010
Сообщений: 12
1

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

22.05.2010, 18:06. Показов 5495. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу использовать базу знаний написанную на языке 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.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2010, 18:06
Ответы с готовыми решениями:

Переведите пожалуйста с CLIPS на C++
//Клипс не знаю вовсе, знаю, что семантика другая, но нужно что-то похожее, пожалуйста!!!...

Использование CLIPS функции GetFactSlot
Не могу получить значение переменной из CLIPS в builder с помощью GetFactSlot, кто-нибудь ее...

[VP5.2] Использование рекурсивных правил и структурированных данных
Хотелось бы попросить некоторой помощи, тех, для кого нижеупомянутые задачки являются так...

Интеграция C++ и CLIPS
Всем привет и с праздниками!!! Друзья, подскажите пожалуйста как интегрировать С++ и CLIPS на носу...

3
0 / 0 / 0
Регистрация: 17.05.2010
Сообщений: 12
24.05.2010, 18:10  [ТС] 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 выведется на экран в нашем консольном приложении.
0
Disconnecter
04.12.2010, 14:40 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
0 / 0 / 0
Регистрация: 24.05.2015
Сообщений: 4
24.05.2015, 09:01 4
а вы можете рассказать как подключить библиотеки CLIPS к QT?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2015, 09:01
Помогаю со студенческими работами здесь

Интерфейс для CLIPS в C++
Всем привет! Нужна помощь. Надо связать CLIPS с C++(builder или Visual) через интерфейс на них...

Интерфейс для CLIPS
Всем привет! никак не могу справиться с задачей. Необходимо создать интерфейс на builder C++ для...

Задача Автоэксперт CLIPS
Нужно переделать задачу Автоэксперт. Пожалуйста,помогите! Новые условия: -факты- ...

Интерфейс для Clips
Здравствуйте. Нужно сделать графический интерфейс для экспертной системы. Кто нибудь выполнял такую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru