剪辑:匹配(或不匹配空字符串)

时间:2018-11-04 02:04:06

标签: clips expert-system

我试图逐段翻译一个字符串,所以我知道当原始字符串为空时,我们就完成了。问题是,CLIPS如何知道“输入”字符串中什么都没有?

(defrule check-if-empty
    ?phase <- (phase CONVERT)
    (input "code here possibly")
    =>
    (retract ?phase ?input)
    (assert (phase PRINT))
    (return))

2 个答案:

答案 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)))