2016-09-18 85 views
2

當我試圖將一個變量與一個字符串進行比較時,它給了我一個錯誤。我試圖將其與(= ?a "s")進行比較。如何將傳遞給函數的變量與CLIPS中的字符串進行比較?

這是產生誤差的完整代碼例如:

(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 
+0

也許發佈錯誤信息? – rbaleksandar

+0

添加錯誤消息 – endikap100

回答

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

(=)是用於比較數字(整型或浮點型),用於平等。

  • (= 3 3.0)爲TRUE
  • (= 3 3)爲TRUE
  • (= SS)ERROR,s不是NUMBER

(當量)爲PRIMITIVE值的比較以及類型的比較)

  • (eq 6 6.0)是FALSE,不同類型(INTEGER vs. FLOAT)
  • (當量6 6)爲TRUE,相同類型相同的值(INTEGER INTEGER)
  • (當量SI 「SI」)是FALSE,不同類型(SYMBOL與STRING)
  • (當量硅Si)爲TRUE,相同類型,相同的值(SYMBOL SYMBOL)
  • (當量 「SI」 「SI」)爲真時,相同類型的相同的值(STRING STRING)的基本編程指南中

的更多信息(第12節:操作和功能)

替代品:

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

你冷也使用SYMBOL s代替STRING「s」。

相關問題