Определение 15.54. Функция if

(if <выражение>

then

<действие>*

[else

<действие>*])

Если условие, заданное с помощью выражения, выполняется (т. е. не явля­ется ложным), выполняются действия, определенные в блоке then. В про­тивном случае производятся действия из блока else. В каждом из таких блоков может быть задано любое количество действий. Любой блок может содержать вложенную конструкцию if...then...else. Блок else является необязательным. Значение, возвращаемое функцией if, равно значению последнего вычисленного выражения или выполненного действия. Ниже приведен пример использования функции if.

Пример 15.20. Использование функции if

(defrule closed-valves (temp high) (valve?v closed)

(if (=?v 6) then

(printout t "The special valve "?v " is closed!" crlf) (assert (perform special operation))

else

(printout t "Valve "?v " is normally closed" crlf)))

Замечание

Обычно в подобных случаях предпочтительней использование двух правил, как показано в примере 15.21.

Пример 15.21. Альтернатива использованию функции if в правилах

(defrule closed-valves-number-6

(temp high)

(valve 6 closed)

=>

(printout t "The special valve 6 is closed!" crlf)

(assert (perform special operation)))

(defrule closed-valves-other-than-6

(temp high)

(valve?v&~6 closed)

=>

(printout t "Valve "?v " is normally closed" crlf))

Функция while позволяет выполнять простой цикл с предусловием.

Определение 15.55. Функция while

(while <выражение> [do]

<действие>*)

Для задания условия в выражении цикла while могут быть использованы любые предикатные функции. В теле цикла может содержаться произвольное количество действий, включая вложенные циклы или функцию if. Проверка условия выполняется перед выполнением тела цикла. Цикл вы­полняется до тех пор, пока условие остается истинным. Определение цикла while может содержать необязательный символ do между условием и пер­вым действием тела цикла. Для прерывания работы цикла могут быть ис­пользованы функции break и return, описанные ниже. Если для прерыва­ния работы цикла не использовалась функция return, функция while возвращает значение false.

Помимо функции while CLIPS предоставляет также функцию loop-for-count, которая реализует концепцию простого итеративного цикла, выпол­няющего определенные действия заданное число раз.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: