首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CLIPS & clipsmm:浮动类型的槽

CLIPS & clipsmm:浮动类型的槽
EN

Stack Overflow用户
提问于 2017-03-22 16:22:26
回答 1查看 181关注 0票数 0

我有一个浮点类型的槽的问题。我的知识库文件中有一个模板:

代码语言:javascript
复制
(deftemplate test
(slot slot1 (type INTEGER) (default 10))
(slot slot2 (type FLOAT) (default 4.0))
)

我使用clipsmm将剪辑与Qt-application集成。我这样断言事实:

代码语言:javascript
复制
CLIPS::Fact::pointer fact;
QString fact_str = "(test (slot1 15) (slot2 4.3))";
fact = env.assert_fact(Std(fact_str)); //Std() translates QString into std::string

这一事实被添加到议程中,但slot2的值= 4.0而不是4.3:

代码语言:javascript
复制
<== Activation 0 start:
<== f-0 (initial-fact)
:== ?answer ==> 0 <== 0 //this is global
==> Activation 0 start:
==> f-0 (initial-fact)
Start!
==> f-1 (test (slot1 15) (slot2 4.0))

如果我使用"XCLIPS Expert System“,一切都很好,slot2的值= 4.3。我做错了什么?

UPD。我这样更改了environment.cpp:

代码语言:javascript
复制
Fact::pointer Environment::assert_fact( const std::string& factstring )
{
  void* clips_fact = EnvAssertString( m_cobj, const_cast<char*>(factstring.c_str()) );

  std::cout << "factstring =" << factstring << std::endl;     //std::cout is added
  if ( clips_fact )
    return Fact::create( *this, clips_fact );
  else
    return Fact::pointer();
}

正确显示:"factstring = (test (slot1 15) (slot2 4.3))“

UPD2。我试着这样添加事实:

代码语言:javascript
复制
CLIPS::Template::pointer temp;
temp = env.get_template(Std("test"));
CLIPS::Fact::pointer f1;
f1 = CLIPS::Fact::create(env, temp);
CLIPS::Value v1 = CLIPS::Value(15);
CLIPS::Value v2 = CLIPS::Value(4.3);
f1->set_slot(Std("slot1"), v1);
f1->set_slot(Std("slot2"), v2);
env.assert_fact(f1);

并得到了这样的结果:

代码语言:javascript
复制
==> f-2     (test (slot1 15) (slot2 4,3.0))
EN

回答 1

Stack Overflow用户

发布于 2017-03-27 01:16:05

我不太明白这一点,但下面的帮助:在操作系统的区域设置中更改数字格式。默认情况下使用"ru_Ru“,其中”,“用于分隔小数位。我将其更改为"ba_Ru“(仅用于”详细设置->数字“),浮点型的值在我的专家系统中变得正确。但现在我在打开文件时遇到了一些问题,其中包括西里尔文。我不得不重命名一些文件夹和文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42946163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档