CLIPS:如何将多字段值评估为整数
CLIPS: How to evaluate multifield values as integers
我正在努力正确评估多字段值的整数值。
最终我需要的是对仅包含整数的多槽进行模式匹配,并能够判断 "list" 是否按升序排列。
我目前拥有的:
(defclass status
(is-a USER)
(role concrete)
(pattern-match reactive)
(multislot numbers
(create-accessor write)
(type INTEGER)
(range 1 ?VARIABLE)
(default 1)
)
)
(defrule asc
?st <- (object (is-a status) (numbers $?n))
(test (> (length ?n) 2))
(test (< (first$ ?n) (rest$ ?n)))
=>
(printout t "List " ?n " is ascending" crlf)
)
(make-instance of status (numbers 1 2 3))
我知道这可能不是扩展多槽和填充 (<) 参数的方法,但我似乎找不到正确的方法。
即使参数扩展得当,它仍然说它需要一个整数参数,但是
(first$ ?n)
计算结果不是整数。
我的问题是:
如何将值列表的值 "parse" 取为整数?
其次,我如何扩展这些值以使它们成为 (<) 的参数并判断列表是否按升序排列?
使用 nth$ 函数从多字段中检索单个值。对于第一个值,您将使用 (nth$ 1 ?n)。然而,在您的规则中,您需要做的就是使用 expand$ 函数将数字槽的值拼接到 < 函数的参数列表中。
CLIPS>
(defclass status
(is-a USER)
(multislot numbers))
CLIPS>
(defrule asc
(object (is-a status) (numbers $?n))
(test (> (length ?n) 1))
(test (< (expand$ ?n)))
=>
(printout t "List " ?n " is ascending" crlf))
CLIPS> (make-instance of status (numbers 1 2 3))
[gen1]
CLIPS> (make-instance of status (numbers 2 3 1 4))
[gen2]
CLIPS> (run)
List (1 2 3) is ascending
CLIPS>
我正在努力正确评估多字段值的整数值。
最终我需要的是对仅包含整数的多槽进行模式匹配,并能够判断 "list" 是否按升序排列。
我目前拥有的:
(defclass status
(is-a USER)
(role concrete)
(pattern-match reactive)
(multislot numbers
(create-accessor write)
(type INTEGER)
(range 1 ?VARIABLE)
(default 1)
)
)
(defrule asc
?st <- (object (is-a status) (numbers $?n))
(test (> (length ?n) 2))
(test (< (first$ ?n) (rest$ ?n)))
=>
(printout t "List " ?n " is ascending" crlf)
)
(make-instance of status (numbers 1 2 3))
我知道这可能不是扩展多槽和填充 (<) 参数的方法,但我似乎找不到正确的方法。 即使参数扩展得当,它仍然说它需要一个整数参数,但是
(first$ ?n)
计算结果不是整数。
我的问题是: 如何将值列表的值 "parse" 取为整数? 其次,我如何扩展这些值以使它们成为 (<) 的参数并判断列表是否按升序排列?
使用 nth$ 函数从多字段中检索单个值。对于第一个值,您将使用 (nth$ 1 ?n)。然而,在您的规则中,您需要做的就是使用 expand$ 函数将数字槽的值拼接到 < 函数的参数列表中。
CLIPS>
(defclass status
(is-a USER)
(multislot numbers))
CLIPS>
(defrule asc
(object (is-a status) (numbers $?n))
(test (> (length ?n) 1))
(test (< (expand$ ?n)))
=>
(printout t "List " ?n " is ascending" crlf))
CLIPS> (make-instance of status (numbers 1 2 3))
[gen1]
CLIPS> (make-instance of status (numbers 2 3 1 4))
[gen2]
CLIPS> (run)
List (1 2 3) is ascending
CLIPS>