大家早上好!
作为我硕士论文的一部分,我试图在剪辑中写一些代码来预测37个受试者所感知的味道,并将其与我们在实验中给他们的实际已知味道进行比较。我们使用了122个EMG导联的阵列,并记录了他们体验每种味道时的大脑活动。
我使用WEKA创建了一个导联的层次树,这样我就只保留与感知味觉的大脑区域相关的最重要的导联,直到20个导联。
基于WEKA的树,我试图创建这个智能系统来预测什么味道可能是一种新的主体体验,只需要我们“观察”他们的EMG活动。
所以..。
我使用以下规则在我的事实中找到满足以下条件的事实:
(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...
当我运行它时,我得到的是一条消息:
[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的语法没有被正确使用。
我也想知道“测试天气相等的功能”。我以前用过的
(test (<= ?L7 2))我知道它可以工作,但它不适用于"==“(也就是equal)。我发现的第二个最好的东西是"eq“函数。
还是不走运。
我很抱歉我的愚蠢的问题,但我是一个新的剪辑(通常我是一个医生,而不是一个程序员(还没有!),所以任何帮助将不胜感激。
那么我到底做错了什么呢?我在代码的注释中声明的语法应该是怎样的?
提前谢谢你!
你能帮帮忙吗?
发布于 2019-05-05 10:39:21
错误消息显示错误发生的点:
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))不是。由于最终的(是解析的最后一个令牌),因此错误消息表明它期望该令牌是一个函数名。
对于数字相等比较,请使用=函数。
https://stackoverflow.com/questions/55987939
复制相似问题