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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.80
Digan
0 / 0 / 0
Регистрация: 17.05.2010
Сообщений: 12
#1

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

22.05.2010, 18:06. Просмотров 3265. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2010, 18:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование правил CLIPS в C++ (C++):

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

Работа с двумерными числовыми массивами. Использование указателей. Использование функций пользователя. - C++
Помогите пожалуйста!!!!!!! Сделать три варианта: первый вариант – передача данных между функциями с помощью глобального...

Использование строк.Использование структур - C++
Задачка: Дана строка,состоящая из групп нулей и едениц. Найти и вывести на экран группы с нечетным количеством символов. И еще одна: ...

C/C++ Использование функций, использование break - C++
Здравствуйте. Не знал как назвать тему, боялся что, если назову "КАК ЭТО РАБОТАЕТ?" то её удалят. Пишу программу для вычисления длинных...

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

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

3
Digan
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
Сообщений: n/a
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
My name Ri
0 / 0 / 0
Регистрация: 24.05.2015
Сообщений: 4
24.05.2015, 09:01 #4
а вы можете рассказать как подключить библиотеки CLIPS к QT?
0
24.05.2015, 09:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2015, 09:01
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru