2013-02-27 62 views
2

我在JESS(Java專家系統Shell)中有一個任務,我遇到了一些麻煩。我試圖檢查某個變量(從鍵盤讀取)是一個正整數(我已經設法檢查它是否爲正),但我找不到方法(或函數)以檢查變量是否是整數/數字。JESS - >如何檢查變量的類型並測試它?

我試過功能intergerpnumberp但這些似乎並不奏效。

有人可以幫助我嗎?

+0

我回答,但我懷疑會有更多這樣的。如果你修改你的問題來解釋爲什麼'integerp'沒有做你想做的事,我可以在我的答案中詳細說明。 – 2013-02-27 14:42:53

回答

0

integerp確實是檢查某些東西是否是整數的方法,正如您在下面的記錄中看到的。

Jess> (bind ?x (read)) 
1 
1 
Jess> (integerp ?x) 
TRUE 
Jess> (bind ?y (read)) 
foo 
foo 
Jess> (integerp ?y) 
FALSE 
Jess> (bind ?z (read)) 
1.1 
1.1 
Jess> (integerp ?z) 
FALSE 
+0

謝謝弗裏德曼希爾先生,我會更好地看看它,看看爲什麼我的規則不起作用:) – 2013-02-27 15:03:24

+0

(defrule error (declare(auto-focus TRUE)) ?f < - (kb ?x)的 (試驗(numberp X?)) => (打印輸出噸 「請插入的整數」 CRLF)) (defrule誤差 (聲明(自動聚焦TRUE)) ˚F< - ?(KB ?x) (numberp?x) => (打印輸出t「請插入一個整數」crlf)) 我試圖做的規則有兩種不同的嘗試。我從MAIN模塊的鍵盤讀取了一個特定的值,如果這個變量不是一個整數,那麼這個規則將被觸發,並且會要求用戶再次插入值。 – 2013-02-27 15:08:56

+0

第一個是正確的,但第二個是錯誤的;規則的左側包含模式,而不是函數調用(「測試」在這裏被稱爲模式)。但是第一個應該可以正常工作,假設有一些事情聲明瞭一個「kb」的事實,從鍵盤讀取的值。所以也許你應該告訴我這個事實是從哪裏來的。 – 2013-02-27 15:13:26