我试图逐段翻译一个字符串,所以我知道当原始字符串为空时,我们就完成了。问题是,CLIPS如何知道“输入”字符串中什么都没有?
(defrule check-if-empty
?phase <- (phase CONVERT)
(input "code here possibly")
=>
(retract ?phase ?input)
(assert (phase PRINT))
(return))
答案 0 :(得分:0)
CLIPS具有称为str-length
的内置功能。您必须检查长度是否为0。
CLIPS> (defrule check-if-empty
?phase <- (phase CONVERT)
?input <- (input ?inputstr)
(test (= (str-length ?inputstr) 0))
=>
(retract ?phase ?input)
(printout t "Empty string" crlf)
(return)
)
CLIPS> (assert (phase CONVERT))
<Fact-1>
CLIPS> (run)
CLIPS> (assert (input "foo"))
<Fact-2>
CLIPS> (run)
CLIPS> (assert (input ""))
<Fact-3>
CLIPS> (run)
Empty string
您只需将我的printout
更改为assert
。
答案 1 :(得分:0)
CLIPS中的空字符串为“”,因此只需将“可能的代码在此”替换为“”。除非您正在使用模块并且希望以当前焦点结束模块中规则的执行,否则也无需在规则的末尾放置返回值。
(defrule check-if-empty
?phase <- (phase CONVERT)
?input <- (input "")
=>
(retract ?phase ?input)
(assert (phase PRINT)))