我如何比较传递给函数的变量和 CLIPS 中的字符串?

How can I compare a variable that is passed to a function with a string in 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
(deffunction cierto (?a)
  (if (eq ?a "s")
    then
      (printout t TRUE crlf)
    else
      (printout t FALSE crlf)
  )
)

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

  • (= 3 3.0) 为真
  • (= 3 3) 为真
  • (= s s) 错误,s 不是数字

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

  • (eq 6 6.0) 为 FALSE,不同类型(INTEGER 与 FLOAT)
  • (eq 6 6) 为真,相同类型相同值 (INTEGER INTEGER)
  • (eq si "si") 为 FALSE,不同类型(SYMBOL 与 STRING)
  • (eq si si) 为真,类型相同,值相同 (SYMBOL SYMBOL)
  • (eq "si" "si") 为真,相同类型相同值 (STRING STRING)

基本编程指南中的更多信息(第 12 部分:操作和函数)

选择:

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

你还用 SYMBOL 代替 STRING "s"。