2013-02-27 55 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