bzconnect
Гигиена

1

вания CLIPS

 

Цель лабораторной работы

работы с условными операторами

 

Краткие теоретические сведения

Функция if

Функция if имеет следующий синтаксис:

(if <predicate-expression> then <expression>+ [else <expression>+])

В этом определении <predicate-expression> — это единственное выражение (такое как предикативная функция или переменная), а параметр <expression>+, который следует за ключевыми словами if и then, представляет собой одно или несколько выражений, которые должны быть вычислены с учетом значения, полученного в результате вычисления выражения <predicate-expression>. Обратите внимание на то, что выражение else является необязательным.

Функцию if удобно использовать для проверки значений в правой части правила, поскольку это позволяет избавиться от необходимости осуществлять проверку с помощью других правил. Например, с помощью следующего правила можно определить, должно ли быть продолжено выполнение программы:

(defrule continue-check

?phase <- (phase check-continue) =>

(bind ?answer (read))

(if (or (eq ?answer y) (eq ?answer yes)) then (assert (phase continue)) else (assert (phase halt))))

Следует отметить, что функция if позволяет преобразовать положительный или отрицательный ответ, yes или nо, в факт, указывающий, какого типа действие должно быть предпринято. В рассматриваемом случае таким действием становится либо continue, либо halt.

Возвращаемым значением функции if является результат вычисления последнего выражения в части then или else функции. Если результатом вычисления выражения <predicate-expression> становится FALSE и в функции отсутствует часть then, то функция возвращает символ FALSE.

 

switch

имеет следующий синтаксис:

(switch <test-expression> <case-statement>* [<default-statement>])

В этом определении оператор <casestatement> имеет следующую форму:

(case <comparison-expression> then <expression>*)

а оператор <defaultstatement> определен таким образом:

(default <expression>*)

Часть <expression, должен быть расположен после всех других конструкций case.

>, значение которого совпадало бы со значением <testexpression>, и задан вариант <defaultstatement>, то выполняются действия, определяемые вариантом <defaultstatements

используется для установления соответствия между символическими именами и знаками арифметических функций.

(defrule perform-operation

(operation ?type ?argl ?arg2) =>

(switch ?type

2) crlf))))

В качестве примера можно привести следующий диалог:

CLIPS> (assert (operation plus 3 4))

<Fact-l>

CLIPS> (run)

3 plus 4 is 7

CLIPS>

в операторе switch, после чего выводится результат сложения чисел 3 и 4.

break

имеет следующий синтаксис: (break)

казанное в приведенном ниже диалоге, выводит первые пять элементов из списка, а затем выводит многоточие, …, если есть еще оставшиеся элементы.

CLIPS>

(defrule print-list

(print-list $?llst)

=>

(progn$ (?v ?llst)

else

(break)))

(printout t crlf))

CLIPS> (reset)

CLIPS> (assert (print-list a b с d e))

<Fact-l>

CLIPS> (run)

a b с d e

CLIPS> (assert (print-list abcdefgh))

<Fact-2>

CLIPS> (run)

a b с d e …

CLIPS>

 

halt

halt)) можно было бы заменить таким действием, которое прекращает выполнение правил:

(halt)

. Рассмотрим следующую модификацию правила continue-check:

(defrule continue-check

?phase <- (phase check-continue) =>

(while (and (neq ?answer yes) (neq ?answer no)) do

Обратите внимание на то, что в этом правиле в список фактов вносится факт (phaseполнению программы с того места, где она была остановлена, воспользовавшись командой run.

Задание на лабораторную работу

Написать программы, выполняющие задания в соответствие с вариантом.

if.

:

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

x+y|;

13. ;

x-y|;

y|;

16. ;

y|;

x|;

19. ;

20. ;

 

if.

:

 

 

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

 

. Программа выводит наименование объекта по его номеру.

: требуется вывести на экран…

1. наименование дня недели по его номеру;

2. название месяца по его номеру;

3. фамилия футболиста на поле по его номеру;

4. фамилия хоккеиста на льду по его номеру;

5. название цифры;

6. название телеканала по его номеру;

7. название радиостанции по частоте её вещания;

квартиры;

9. пункт назначения общественного транспорта по номеру;

10. фамилия владельца машины по госномеру;

по номеру телефона;

12. наименование товара по артикулу;

13. ФИО по серии и номеру паспорта;

14. страна по телефонному коду;

15. фамилия командира экипажа по номеру самолёта;

16. фамилия командира по номеру военной части;

17. название услуги сотового оператора по короткому номеру;

серийному номеру;

19. танк серии «ИС» по году выпуска;

20. день недели 2014 года по месяцу и числу;

21. день недели по дате;

22. событие 21-ого века по номеру года;

23. високосный год или нет по заданному году.

 

 

Порядок выполнения работы

Ознакомиться с теоретическими сведениями.

2. Для каждого задания написать программу, выполняющую требуемые вычисления.

 

Требования к отчету

Отчет должен:

1. удовлетворять требованиям к отчёту, заявленным в пункте «Общие требования к отчёту по лабораторным работам»;

2. иметь нумерацию заголовков в соответствии с номером задания.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *