如何将传递给函数的变量与CLIPS中的字符串进行比较?

时间:2016-09-18 13:06:15

标签: clips

当我尝试将变量与字符串进行比较时,它会给我一个错误。我尝试将其与(= ?a "s")进行比较。

这是产生错误的完整代码示例:

(deffunction cierto (?a)
  (if (= ?a "s")
    then
      (printout t TRUE crlf)
    else
      (printout t FALSE crlf)
  )
)

错误:

Defining deffunction: cierto
[ARGACCES5] Function = expected argument #2 to be of type integer or float

ERROR:
(deffunction MAIN::cierto
   (?a)
   (if (= ?a "s")
FALSE

1 个答案:

答案 0 :(得分:3)

(deffunction cierto (?a)
  (if (eq ?a "s")
    then
      (printout t TRUE crlf)
    else
      (printout t FALSE crlf)
  )
)

(=)用于比较数字(INTEGER或FLOAT)是否相等。

  • (= 3 3.0)为TRUE
  • (= 3 3)为TRUE
  • (= s s)错误,s不是NUMBER

(eq)用于比较PRIMITIVE值以及类型的比较)

  • (eq 6 6.0)为FALSE,不同类型(INTEGER vs. FLOAT)
  • (eq 6 6)为TRUE,相同类型的相同值(INTEGER INTEGER)
  • (eq si“si”)为FALSE,不同类型(SYMBOL vs. STRING)
  • (eq si si)为TRUE,相同类型,相同值(SYMBOL SYMBOL)
  • (eq“si”“si”)为TRUE,相同类型的相同值(STRING STRING)

“基本编程指南”(第12节:动作和功能)中的更多信息

替代:

(deffunction cierto2 (?a)
  (printout t (eq ?a "s") crlf)
)

你冷也使用SYMBOL而不是STRING“s”。