Types 杰西->;如何检查变量的类型并对其进行测试?

Types 杰西->;如何检查变量的类型并对其进行测试?,types,numbers,integer,jess,Types,Numbers,Integer,Jess,我在JESS(Java专家系统Shell)中有一个任务,我遇到了一些麻烦 我试图检查某个变量(从键盘读取)是否为正整数(我已经设法检查它是否为正),但我找不到方法(或函数)来检查该变量是否为整数/数字 我尝试了INTERERP和numberp的功能,但它们似乎不起作用 有人能帮我吗?integerp确实是一种检查某个东西是否是整数的方法,你可以在下面的文本中看到 Jess> (bind ?x (read)) 1 1 Jess> (integerp ?x) TRUE Jess>

我在JESS(Java专家系统Shell)中有一个任务,我遇到了一些麻烦

我试图检查某个变量(从键盘读取)是否为正整数(我已经设法检查它是否为正),但我找不到方法(或函数)来检查该变量是否为整数/数字

我尝试了INTERERP和numberp的功能,但它们似乎不起作用


有人能帮我吗?

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

我回答了,但我怀疑这会有更多。如果你修改你的问题来解释为什么
integraerp
不能满足你的要求,我可以在我的回答中详细说明。谢谢你,弗里德曼·希尔先生,我会仔细看看,看看为什么我的规则不起作用:)(defrule错误(declare(auto focus TRUE))?f(打印输出t“请插入一个整数”crlf))(defrule错误(声明(自动对焦为真))?f(打印输出t“请插入一个整数”crlf))我尝试对规则进行两次不同的尝试。我从主模块的键盘上读取某个值,如果该变量不是整数,则会触发此规则,并要求用户再次插入该值。第一次是正确的,但第二次是错误的;规则的左侧包含模式,而不是function调用(“test”在这里算作一个模式。)但是第一个应该可以正常工作,假设某个东西正在断言一个
kb
事实,其中有一项是从键盘读取的值。因此,也许你应该告诉我这个事实的来源。(defrule init=>(printout t“Insert function number:”crlf)(bind?fun(read))(如果(?fun 1)那么(focus Somar))(如果(?fun 2)那么(focus Subtrair))(如果(?fun 3)那么(focus Quadrado))(打印输出t“Insert integer:”crlf)(断言(kb(read)))我刚刚删除了一些(打印输出)这是为了使阅读更容易,因为它不会改变规则行为。我花了太长时间才看到这一点,但问题在于另一条规则--当
(test(integerp?x))
为真时,您的规则匹配,但当
(test(integerp?x))为真时,您希望打印消息
为false,这一定是您看到的问题。只需更改模式以反转表达式的逻辑意义,即
(test(not(integraerp?x)))