首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CLIPS中有测试函数的相等运算符吗?另外,嵌套的or是如何工作的?

在CLIPS中有测试函数的相等运算符吗?另外,嵌套的or是如何工作的?
EN

Stack Overflow用户
提问于 2019-05-05 08:35:23
回答 1查看 123关注 0票数 0

大家早上好!

作为我硕士论文的一部分,我试图在剪辑中写一些代码来预测37个受试者所感知的味道,并将其与我们在实验中给他们的实际已知味道进行比较。我们使用了122个EMG导联的阵列,并记录了他们体验每种味道时的大脑活动。

我使用WEKA创建了一个导联的层次树,这样我就只保留与感知味觉的大脑区域相关的最重要的导联,直到20个导联。

基于WEKA的树,我试图创建这个智能系统来预测什么味道可能是一种新的主体体验,只需要我们“观察”他们的EMG活动。

所以..。

我使用以下规则在我的事实中找到满足以下条件的事实:

代码语言:javascript
复制
(test (or    (or(eq ?L7 -5);Meaning that: test if L7 is either -5, -4, -4, -2, 2
                (eq ?L7 -4)
                (eq ?L7 -3)
                (eq ?L7 -2)
                (eq ?L7 2))
         ;OR
             (  (eq ?L7 -1);or test weather 
                (or(eq ?L120 -5)     ;L7 is -1 AND L120 is -5 or
                   (eq ?L120 -4)     ;L7 is -1 AND L120 is -4 or
                   (eq ?L120 -3)     ;L7 is -1 AND L120 is -3 or
                   (eq ?L120 -1)     ;L7 is -1 AND L120 is -1 or
                   (eq ?L120 1)      ;L7 is -1 AND L120 is 1 or
                   (eq ?L120 2)      ;L7 is -1 AND L120 is 2 or
                   (eq ?L120 3)      ;L7 is -1 AND L120 is 3 or
                   (eq ?L120 4)      ;L7 is -1 AND L120 is 4 or
                   (eq ?L120 5))     ;L7 is -1 AND L120 is 5 
             )
           ;OR
            (   (eq ?L7 0)       ;OR weather 
                (eq ?L60 -4)     ;L7 is 0 and L60 is -4
            )

...etc...

当我运行它时,我得到的是一条消息:

代码语言:javascript
复制
[EXPRNPSR1] A function name must be a symbol

ERROR:
(defrule MAIN::rule1
    (declare (salience 60))
    (?f <- (facts (id ?id) (L7 ?L7) (L20 ?L20) (L23 ?L23) (L26 ?L26) ;other parameters follow ...
    (test (or (or (eq ?L7 -5) (eq ?L7 -4) (eq ?L7 -3) (eq ?L7 -2) (eq ?L7 2)) ((     

然后它就停止了,这显然意味着我在test函数中嵌套的or的语法没有被正确使用。

我也想知道“测试天气相等的功能”。我以前用过的

代码语言:javascript
复制
(test (<= ?L7 2))

我知道它可以工作,但它不适用于"==“(也就是equal)。我发现的第二个最好的东西是"eq“函数。

还是不走运。

我很抱歉我的愚蠢的问题,但我是一个新的剪辑(通常我是一个医生,而不是一个程序员(还没有!),所以任何帮助将不胜感激。

那么我到底做错了什么呢?我在代码的注释中声明的语法应该是怎样的?

提前谢谢你!

你能帮帮忙吗?

EN

回答 1

Stack Overflow用户

发布于 2019-05-05 10:39:21

错误消息显示错误发生的点:

代码语言:javascript
复制
         CLIPS (6.30 3/17/15)
CLIPS> 
(deftemplate facts
  (slot id)
  (slot L7)
  (slot L20)
  (slot L23)
  (slot L26))
CLIPS> 
(defrule MAIN::rule1
    (declare (salience 60))
    ?f <- (facts (id ?id) (L7 ?L7) (L20 ?L20) (L23 ?L23) (L26 ?L26))
    (test (or (or (eq ?L7 -5) 
                  (eq ?L7 -4) 
                  (eq ?L7 -3) 
                  (eq ?L7 -2) 
                  (eq ?L7 2)) 
               (()))) 
    =>)     

[EXPRNPSR1] A function name must be a symbol

ERROR:
(defrule MAIN::rule1
   (declare (salience 60))
   ?f <- (facts (id ?id) (L7 ?L7) (L20 ?L20) (L23 ?L23) (L26 ?L26))
   (test (or (or (eq ?L7 -5) (eq ?L7 -4) (eq ?L7 -3) (eq ?L7 -2) (eq ?L7 2)) ((
CLIPS> 

在这种情况下,错误发生在遇到两个左括号“(”的位置。与允许中缀运算符和使用括号指定优先级的语言不同,您不能在剪辑中使用额外的括号。所以(+ 3 4)是有效语法,但((+ 3 4))不是。由于最终的(是解析的最后一个令牌),因此错误消息表明它期望该令牌是一个函数名。

对于数字相等比较,请使用=函数。

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

https://stackoverflow.com/questions/55987939

复制
相关文章

相似问题

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