gpt4 book ai didi

CLIPS(专家系统)与C的通信——CLIPS与MATLAB

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:47 25 4
gpt4 key购买 nike

我有一个名为 "amortiss.c"C 函数,我想将它连接到 CLIPS(专家系统工具)。事实上,我想将函数 “amortiss.c” 返回的变量“result”传递给 CLIPS,以便它比较这个“result"到 1,然后根据比较显示消息

if (result <1) then (do...); 
else if (result ==1) then do (...);

根据Clips 用户指南,我应该定义一个称为用户定义函数的外部函数。问题是这个函数是用 C 编写的 CLIPS 函数..所以我看不出它如何帮助我将“amortiss.c”连接到 剪辑

是否也可以将 Clips 连接到 Matlab? (.clp 文件和.m 文件之间的通信)?

感谢您的所有建议和意见。

最佳答案

您不需要定义外部函数。如果您希望 CLIPS 调用 C 函数,那就是这样。

查看本文档中的“4.4.4 CreateFact”部分:

http://clipsrules.sourceforge.net/documentation/v624/apg.htm

它展示了如何将新事实断言到 CLIPS 环境中。前面的 4.4.3 节给出了一个如何将新字符串断言到 CLIPS 中的示例。我没有测试字符串断言,但我可以确认 4.4.4 示例适用于 deftemplate。

例如,创建一个文本文件“foo.clp”:

(deftemplate foo
(slot x (type INTEGER) )
(slot y (type INTEGER) )
)

(defrule IsOne
?f<-(foo (x ?xval))
(test (= ?xval 1))
=>
(printout t ?xval " is equal to 1" crlf)
)

(defrule NotOne
?f<-(foo (x ?xval))
(test (!= ?xval 1))
=>
(printout t ?xval " is not equal to 1" crlf)
)

并创建一个C程序“foo.c”

#include <stdio.h>
#include "clips.h"

int addFact(int result)
{

VOID *newFact;
VOID *templatePtr;
DATA_OBJECT theValue;

//==================
// Create the fact.
//==================
templatePtr = FindDeftemplate("foo");
newFact = CreateFact(templatePtr);

if (newFact == NULL) return -1;

//======================================
// Set the value of the x
//======================================
theValue.type = INTEGER;
theValue.value = AddLong(result);
PutFactSlot(newFact,"x",&theValue);

int rval;

if (Assert(newFact) != NULL){
Run(-1);
rval = 0;
}
else{
rval = -2;
}

return rval;
}


int main(int argc, char *argv[]){

if (argc < 2) {
printf("Usage: ");
printf(argv[0]);
printf(" <Clips File>\n");
return 0;
}
else {

InitializeEnvironment();
Reset();

char *waveRules = argv[1];
int wv = Load(waveRules);

if(wv != 1){
printf("Error opening wave rules!\n");
}

int result = 1;

addFact(result);
result = 3;
addFact(result);
}
return 0;

}

运行:

foo foo.clp

这可能有点矫枉过正,但我​​认为它可以完成工作!

关于CLIPS(专家系统)与C的通信——CLIPS与MATLAB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16830467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com