Клипы: Соответствующие (или не соответствующие пустой строке) - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь перевести строку по частям, поэтому я знаю, когда исходная строка пуста, тогда мы закончили. Вопрос в том, как CLIPS узнает, когда в строке «input» ничего нет?

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

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Пустая строка в CLIPS - это "", поэтому просто замените "код здесь возможно" на "". Также нет необходимости помещать возврат в конец правила, если вы не используете модули и не хотите завершить выполнение правил в модуле с текущим фокусом.

(defrule check-if-empty
    ?phase <- (phase CONVERT)
    ?input <- (input "")
    =>
    (retract ?phase ?input)
    (assert (phase PRINT)))
0 голосов
/ 04 ноября 2018

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.

...