Глава 4
Функции в CLIPS
Набор функций CLIPS
Набор функций CLIPS
Глава 5. Основные функции CLIPS
Предикатные функции
Предикатные функции
Предикатные функции
Предикатные функции
Предикатные функции
Функции eq и neq
Функция eq
Функция neq
Пример 5.1. Использование функций eq и neq
Функции сравнения чисел
Функции сравнения чисел
Функции сравнения чисел
Особенности функций сравнения чисел
Пример 5.2. Ошибки округления
Функции стандартной булевой логики and, or и not
Функция and
Функция or
Функция not
Глава 5. Основные функции CLIPS
Математические функции CLIPS
Стандартные математические функции
Функция +
Функция +
Функция +
Функция –
Функция *
Функция /
Функция /
Функция /
Функция div
Функция div
Функции max и min
Функции max и min
Функция abs
Функции float и integer
Расширенные математические функции
Тригонометрические функции
Тригонометрические функции
Расширенные математические функции, не вошедшие в подгруппу тригонометрических функции
Тригонометрические функции
Функции для преобразования аргумента из градусов в секторы и радианы и обратно
Функция pi
Функция sqrt
Функция ** (Power)
Функция ехр
Функции log и log10
Функции log и log10
Функции log и log10
Функция round
Функция mod
Функция mod
Глава 5. Основные функции CLIPS
Функция str-cat
Функция sym-cat
Пример 5.4. Использование функций str-cat и sym-cat
Функции sub-string
Функция str-index
Пример 5.5. Использование функций sub-string и str-index
Функция eval
Функция eval
Функция build
Пример 5.6. Использование функций eval и build
Функции upcase и lowcase
Пример 5.7. Использование функций upcase и lowcase
Функция str-compare
Функция str-length
Пример 5.8. Использование функций str-compare и str-length
Функция check-syntax
Функция check-syntax
Функция check-syntax
Пример 5.9. Использование функции check-syntax
Функция string-to-field
Пример 5.10. Использование функции string-to-field
Глава 5. Основные функции CLIPS
Функция create$
Функция nth$
Функция member$
Функция member$
Функция subsetp
Функция subsetp
Функции explode$ и implode$
Пример 5.12. Использование функций explode$ и implode$
Функция delete$
Функция subseq$
Функция replace$
Функция insert$
Функции first$ и rest$
Пример 5.14. Использование функций first$ и rest$
Функция length$
Функция delete-member$
Функция replace-member$
Пример 5.15. Использование функций delete-member$ и replace-member$
Глава 5. Основные функции CLIPS
Система ввода/вывода, CLIPS
Предопределенные логические имена CLIPS
Предопределенные логические имена CLIPS
Предопределенные логические имена CLIPS
Предопределенные логические имена CLIPS
Функция read
Функция read
Функция read
Функция read
Функция read
Функция open
Функция open
Функция open
Функция open
Функция open
Функция open
Способы открытия файла
Пример 5.16. Использование функции open
Функция close
Функция close
Функция printout
Функция printout
Функции open, printout, close
Функции open, printout, close
Функция read
Функция read
Функция read
Функция read
Функция readline
Функция readline
Функция readline
Функция format
Функция format
Функция format
Функция format
Функция format
Способы открытия файла
Способы открытия файла
Функция format
Функция rename
Функция remove
1.06M
Категория: ПрограммированиеПрограммирование

Основные функции CLIPS

1. Глава 4

Основные функции CLIPS

2. Функции в CLIPS

• Функциями в CLIPS называются
предопределенные системные действия,
обрабатывающие заданный набор аргументов и
возвращающие некоторый результат.
• Функции могут вводиться в диалоговом окне
CLIPS с клавиатуры или использоваться в
правилах, обработчиках сообщений,
определенных пользователем в функциях или
родовых функциях.
2

3. Набор функций CLIPS

• логические и математические функции,
• функции работы со строками и
составными величинами,
• функции ввода/вывода,
• процедурные функции,
• функции для работы с методами родовых
функций,
3

4. Набор функций CLIPS

• функции, ориентированные на
поддержку объектно-ориентированных
возможностей,
• функции для работы с конструкторами
deftemplate, deffacts, defrule, defglobal,
deffunction, defgeneric, defmethod,
defmodule.
4

5. Глава 5. Основные функции CLIPS

§5.1. Логические функции

6. Предикатные функции


Назначение предикатных функций
заключается в тестировании своего
единственного аргумента на
принадлежность к тому или иному
типу.
Обобщенный синтаксис:
(<имя-предикатнойфункции><выражение>)
6

7. Предикатные функции

• При выполнении предикатной функции
вычисляется выражение, переданное ей в
качестве единственного параметра, и
проверяется соответствие параметра
некоторому типу.
• Если принадлежность к проверяемому типу
подтверждается, функция возвращает значение
TRUE.
• В противном случае — FALSE.
7

8. Предикатные функции

Функция
Описание
numberp
Проверка, относится ли аргумент к
типу float или integer
floatp
Проверка, относится ли аргумент к
типу float
integerp
Проверка, относится ли аргумент к
типу integer
lexemep
Проверка, относится ли аргумент к
типу symbol или string
8

9. Предикатные функции

Функция
Описание
stringp
Проверка, относится ли аргумент к
типу string
symbolp
Проверка, относится ли аргумент к
типу symbol
wordp
Синоним функции symbolp
evenp
Проверка целого числа на четность
9

10. Предикатные функции

Функция
oddp
multifieldp
sequencep
pointerp
Описание
Проверка
целого
числа
на
нечетность
Проверка, является ли аргумент
составным полем
Синоним функции multifieldp
Проверка, относится ли аргумент к
типу external-address
10

11. Функции eq и neq

• Другими полезными логическими
функциями являются eq (comparing for
Equality) и neq (comparing for
Inequality), синтаксис которых приведен
ниже.
• (eq <выражение1> <выражение2>+)
• (neq <выражение1> <выражение2>+)
11

12. Функция eq

• Возвращает значение TRUE, если ее первый
аргумент равен второму и всем последующим
аргументам (если они присутствуют).
• В противном случае функция возвращает
значение FALSE.
• Функция сравнивает как значения аргументов,
так и их типы.
Например:
• (eq 3 3.0) = FALSE, т. к. число 3 принадлежит
типу integer, а число 3.0 — типу float.
12

13. Функция neq

• Функция neq, напротив, возвращает
значение TRUE, если ее первый аргумент
не равен второму и последующим
аргументам, и значение FALSE — в
противном случае.
13

14. Пример 5.1. Использование функций eq и neq

(eq foo bar mumble foo)
(eq foo foo foo foo)
(eq 3 4)
(neq foo bar yak bar)
(neq foo foo yak bar)
(neq 3 a)
14

15.

15

16. Функции сравнения чисел

• Помимо функций eq и neq, CLIPS
предоставляет несколько функций,
предназначенных для сравнения чисел.
Общий синтаксис таких функций
приведен ниже.
• (<имя-функции> <численное-выражение1>
<численное-выражение2>+)
16

17. Функции сравнения чисел

• Функции вычисляют полученные в качестве
параметров выражения и проверяют,
выполняется ли заданное условие между
первым и всеми последующими аргументами.
• Если условие выполняется, функция
возвращает значение TRUE.
• В противном случае — FALSE.
• Все функции данной группы сравнивают
только числовые значения и при
необходимости преобразуют значения типа
integer в тип float.
17

18. Функции сравнения чисел

Функция
Описание
=
Проверка равенства
аргументов
первого
<>
Проверка неравенства
аргументов
>
Проверка того, что первый аргумент больше
остальных
>=
Проверка того, что первый аргумент больше или
равен остальным
<
Проверка того, что первый аргумент меньше
остальных
<=
Проверка того, что первый аргумент меньше или
равен остальным
первого
и
остальных
и
остальных
18

19. Особенности функций сравнения чисел

• Поскольку точность чисел с плавающей
точкой изменяется при переходе от
одного компьютера к другому, функции
сравнения могут получать различные
результаты на различных компьютерах.
• Даже если код программы не
переносится на другой ПК, погрешность
округления может вызвать различные
ошибки.
19

20. Пример 5.2. Ошибки округления

(= 0.666666666666666666 0.666666666666666667)
20

21. Функции стандартной булевой логики and, or и not

• CLIPS предоставляет также три функции
стандартной булевой логики: and, or и
not.
• (and
• (or
• (not
<выражение>+)
<выражение>+)
<выражение>)
21

22. Функция and

• Возвращает значение TRUE, если значение
каждого из ее аргументов равняется TRUE.
• В противном случае она возвращает значение
FALSE.
• Каждый аргумент функции проверяется слева
направо.
• Если встречается аргумент со значением
FALSE, проверка значений аргументов
прекращается, и функция возвращает значение
FALSE.
22

23. Функция or

• Возвращает значение TRUE, если значение
хотя бы одного из ее аргументов равняется
TRUE.
• Иначе она возвращает значение FALSE.
• Как и в случае функции and, аргументы
функции проверяются слева направо.
• При встрече первого аргумента со значением
TRUE проверка значений аргументов
прекращается, и все выражение получает
значение TRUE.
23

24. Функция not

• Функция not возвращает значение TRUE,
если ее аргумент имеет значение, равное
FALSE.
• В противном случае она возвращает
значение FALSE.
24

25. Глава 5. Основные функции CLIPS

§5.2. Математические функции

26. Математические функции CLIPS

• Математические функции CLIPS
разделены на два пакета:
• набор стандартных математических
функций;
• набор расширенных математических
функций.
26

27. Стандартные математические функции

• Стандартные математические функции
могут быть использованы только с
числовыми аргументами.
• Если в математическую функцию будет
передан аргумент строкового или другого
неподходящего типа, функция вернет
сообщение об ошибке.
27

28. Функция +

• Функция + возвращает сумму своих
аргументов.
• (+ <выражение1> <выражение2>+)
• Если все аргументы функции
принадлежат типу float, возвращаемое
функцией значение также будет
вещественного типа.
28

29. Функция +

• Аналогично возвращаемый функцией
результат принадлежит типу integer, если
все аргументы целые.
• Сложение невыполнимо, если типы
переданных аргументов различаются
(integer и float). В этом случае функция
возвращает промежуточное значение,
полученное при сложении аргументов
одинакового типа.
29

30. Функция +

30

31. Функция –

• Функция – возвращает значение ее
первого аргумента минус все
последующие.
• (- <выражение1> <выражение2>+)
31

32. Функция *

• Функция * возвращает произведение
своих аргументов. Все замечания по
поводу типов аргументов, сделанные для
функции +, в полной мере применимы к
аргументам функций – и *.
• (* <выражение1> <выражение2>+)
32

33. Функция /

• Функция / возвращает частное от деления
первого аргумента на каждый из
последующих.
• (/ <выражение1> <выражение2>+)
• Как и в случаях функций +, – и *, функция / не
допускает смешанного набора аргументов. По
умолчанию делимое автоматически
преобразуется в число с плавающей точкой.
• Все последующие аргументы и результат
выполнения функции должны представлять
собой числа с плавающей точкой.
33

34. Функция /

• Функция set-auto-float-dividend
позволяет менять подобное поведение
системы.
• Если режим автоматического
преобразования чисел при делении
отключен, выражение (/ 4 3 4.0)
возвратит значение 0.25.
• При конфигурации по умолчанию
результатом подобного действия
является 0.333333333.
34

35. Функция /

35

36. Функция div

• Функция div возвращает частное от
деления первого аргумента на каждый из
последующих.
• Все аргументы данной функции
автоматически преобразуются в целые
для выполнения целочисленного
деления.
• Функция возвращает значение типа
integer.
• (div <выражение1> <выражение2>+)
36

37. Функция div

37

38. Функции max и min

• Предназначены для нахождения
наибольшего и наименьшего аргумента
соответственно.
• При необходимости, аргументы типа integer
временно преобразуются в тип float для
выполнения сравнения.
• Возвращаемое значение может быть как
целого, так и вещественного типа (в
зависимости от типа наибольшего или
наименьшего аргумента).
• (max <выражение>+) (min <выражение>+)
38

39. Функции max и min

39

40. Функция abs

• Функция abs возвращает абсолютное
значение аргумента.
• Значение, возвращаемое этой функцией,
может быть как целого, так и
вещественного типа (в зависимости от
типа аргумента).
• (abs <выражение>)
40

41. Функции float и integer

• Функции float и integer предназначены
для преобразования единственного
аргумента в тип вещественный и целый
тип соответственно.
• (float <выражение>)
• (integer <выражение>)
41

42. Расширенные математические функции

• В дополнение к стандартным
математическим функциям, CLIPS также
содержит большое число научных и
тригонометрических функций для более
сложных вычислений.
• Пакет этих функций, включенный в
основную версию CLIPS, может быть
отключен с целью экономии памяти, если
экспертная система не нуждается в этих
возможностях.
42

43. Тригонометрические функции

• Тригонометрические функции
принимают один числовой аргумент и
возвращают число с плавающей точкой.
• Для проведения вычислений аргументы
тригонометрических функций
необходимо переводить в радианы.
43

44. Тригонометрические функции

Функция
Описание
acos
Арккосинус
acosh
Гиперболический арккосинус
acot
Арккотангенс
acoth
Гиперболический арккотангенс
acsc
Арккосеканс
asec
Гиперболический арккосеканс
acsch
Арксеканс
asech
Гиперболический арксеканс
asin
Арксинус
asinh
Гиперболический арксинус
atan
Арктангенс
atanh
Гиперболический арктангенс
44

45. Расширенные математические функции, не вошедшие в подгруппу тригонометрических функции

45

46. Тригонометрические функции

Функция
Описание
cos
Косинус
cosh
Гиперболический косинус
cot
Котангенс
coth
Гиперболический котангенс
esc
Косеканс
csch
Гиперболический косеканс
sec
Секанс
sech
Гиперболический секанс
sin
Синус
sinh
Гиперболический синус
tan
Тангенс
tanh
Гиперболический тангенс
46

47. Функции для преобразования аргумента из градусов в секторы и радианы и обратно

• Значения, возвращаемые функциями,
принадлежат вещественному типу.
(360° равняется сектору, размером 400
градов, или 2π радианам).
(deg-grad <выражение>)
(deg-rad <выражение>)
(grad-deg <выражение>)
(rad-deg <выражение>)
47

48. Функция pi

• Функция pi предназначена для получения
числа n с точностью до 15-го знака и не
имеет параметров.
• (pi)
48

49. Функция sqrt

• Функция sqrt возвращает значение
квадратного корня, извлеченного из ее
аргумента, в виде числа с плавающей
точкой.
• (sqrt <выражение>)
49

50. Функция ** (Power)

• Предназначена для возведения числа в
заданную степень.
• Возводит первый аргумент в степень
(возможно не целую), заданную вторым
аргументом
• Возвращает результат вещественного типа.
• (** <выражение1> <выражение2>)
50

51. Функция ехр

• Функция ехр возводит число е (основу
натурального логарифма, имеющую
значение, приблизительно равное
2.718281828459045) в степень, равную
полученному аргументу, и возвращает
полученное значение в виде числа с
плавающей точкой.
• (ехр <выражение>)
51

52. Функции log и log10

• Функции, предназначенные для
вычисления натурального и десятичного
логарифма.
• (log <выражение>)
• (log10 <выражение>)
• Аргументы и возвращаемый результат
обеих функций являются вещественными
значениями.
52

53. Функции log и log10

• Функция log (натуральный логарифм)
возвращает такое число х, что следующее
уравнение является верным
где n — аргумент функции.
• В свою очередь функция log10
(десятичный логарифм) возвращает число
х, удовлетворяющее уравнению
где n — аргумент функции.
53

54. Функции log и log10

54

55. Функция round

• Функция round округляет свой аргумент
до ближайшего целого числа.
• Если аргумент находится точно между
двумя целыми числами, то он
округляется к меньшему числу.
• Тип возвращаемого результата — integer.
• (round <выражение>)
55

56. Функция mod

• Функция mod возвращает остаток от
деления первого аргумента на второй,
предполагая, что результат деления
должен быть целочисленным.
• Функция возвращает значение типа
integer, если оба аргумента
целочисленные.
• В противном случае функция возвращает
вещественный результат.
• (mod <выражение1> <выражение2>)
56

57. Функция mod

57

58. Глава 5. Основные функции CLIPS

§5.3. Функции работы со
строками

59. Функция str-cat

• Функция str-cat объединяет все свои
аргументы в строку и возвращает ее в
качестве результата.
• Аргументы функции должны
принадлежать одному из следующих
типов: symbol, string, float, integer или
instance-name.
• (str-cat <выражение>*)
59

60. Функция sym-cat

• Функция sym-cat объединяет свои
аргументы и возвращает в качестве
результата значение типа symbol.
• Тип возвращаемого результата —
единственное отличие sym-cat от
функции str-cat.
• (sym-cat <выражение>*)
60

61. Пример 5.4. Использование функций str-cat и sym-cat

(str-cat
(sym-cat
"foo" bar)
"foo" bar)
61

62. Функции sub-string

• Функция sub-string служит для выделения
подстроки
• Возвращает фрагмент исходной строки как
отдельную строку.
• (sub-string
<целочисленное-выражение1>
<целочисленное-выражение2> <строка>)
• Первый аргумент функции задает индекс
первого символа выделяемой подстроки, а
второй аргумент — последнего символа.
• Сама строка определяется последним
аргументом.
• Если первый аргумент больше второго,
функция возвращает 0.
62

63. Функция str-index

• Функция str-index возвращает позицию
заданной подстроки внутри строки.
• Результат выполнения функции относится к
целому типу и равен индексу первого символа
подстроки.
• В случае если искомая подстрока не была
найдена, функция str-index возвращает
значение FALSE.
• (str-index <подстрока> <строка>)
63

64. Пример 5.5. Использование функций sub-string и str-index

64

65. Функция eval

• Функция eval выполняет указанное
выражение в строке, как будто это
команда, введенная извне в среду CLIPS.
• Единственный аргумент функции —
команда, которая будет выполнена,
заданная значением типа string или
symbol.
• (eval <строка>)
65

66. Функция eval

• Функция не позволяет использовать
локальные переменные кроме случаев,
когда локальная переменная
определяется внутри исполняемой
строки. Функция не допускает
выполнение конструкторов CLIPS.
• Значение, возвращаемое функцией eval,
является результатом выполненной
команды или равно FALSE в случае
ошибки.
66

67. Функция build

• Функция build служит для выполнения
строкового выражения в качестве конструктора
среды CLIPS
• (build <строка>)
• Единственный аргумент функции build —
значение типа string или symbol.
• Аргумент представляют собой конструктор,
который будет выполнен в среде CLIPS.
• Функция build возвращает значение TRUE,
если выполнение прошло успешно, и значение
FALSE, если при выполнении произошли
ошибки.
67

68. Пример 5.6. Использование функций eval и build

68

69. Функции upcase и lowcase

• Функции upcase и lowcase служат для
преобразования всех символов заданной
строки в верхний и нижний регистр
соответственно.
• Аргумент функций должен принадлежать
одному из типов: symbol или string.
• Возвращаемый результат соответствует типу
получаемого аргумента.
• (upcase <строка>)
• (lowcase <строка>)
69

70. Пример 5.7. Использование функций upcase и lowcase

70

71. Функция str-compare

• Функция str-compare сравнивает две строки и определяет
их логические отношения (т.е. "равно", "больше чем",
"меньше чем").
• Сравнение выполняется посимвольно до конца строк
(если строки равны), либо пока не встретятся два
неравных символа.
• Функция возвращает целое число, представляющее
результат сравнения.
• Если сравниваемые строки равны, результатом является 0.
• Если первая строка меньше второй, результат — целое
число меньше 0.
• Если первая строка больше второй, возвращаемый
результат — целое число больше 0.
• Аргументы функции должны принадлежать типу string
или symbol.
• (str-compare <строка1> <строка2>)
71

72. Функция str-length

• Функция str-length применяется для
определения длины строки, заданной
типом string или symbol.
• Результат работы этой функции
возвращается в виде целого числа.
• (str-length <строка>)
72

73. Пример 5.8. Использование функций str-compare и str-length

73

74. Функция check-syntax

• Функция check-syntax позволяет
проверить текст, заданный строкой, на
наличие синтаксических и
семантических ошибок языка CLIPS.
• (check-syntax <строка>)
• Функция возвращает значение FALSE,
если в тексте не было найдено ошибок и
неверных речевых конструкций.
74

75. Функция check-syntax

• Значение missing-left-parenthesis
возвращается, если первый значащий
символ строки не является открывающей
круглой скобкой.
• Значение extraneous-input-after-lastparenthesis означает, что в строке после
заключительной скобки выражения или
вызова функции присутствуют
дополнительные символы.
75

76. Функция check-syntax

• В случае обнаружения другой ошибки
функция возвращает составную
величину с двумя полями:
• первое поле содержит строку с текстом
сообщения об ошибке (или значение FALSE,
если ошибок нет);
• второе поле — строка, содержащая текст
предупреждения (или значение FALSE, если
предупреждения отсутствуют).
76

77. Пример 5.9. Использование функции check-syntax

77

78. Функция string-to-field

• Функция string-to-field предназначена для
разбора аргумента, имеющего тип string или
symbol, на отдельные поля и преобразования их
к одному из примитивных типов данных
CLIPS.
• (string-to-field <строка>)
• Данная функция преобразует и возвращает в
качестве результата только первое поле
указанной строки. Использование этой
функции эквивалентно вызову функции read и
вводу с клавиатуры или из файла
соответствующей строки.
78

79. Пример 5.10. Использование функции string-to-field

(string-to-field "3.4")
(string-to-field "aaa bbb")
79

80. Глава 5. Основные функции CLIPS

§5.4. Функции работы с
составными величинами

81. Функция create$

• Функция create$ объединяет заданное
количество выражений для создания составной
величины.
• Независимо от количества полей,
получившихся в результате, возвращаемое
функцией значение всегда является составной
величиной.
• Вызов функции без аргументов возвращает
составную величину с нулевой длиной.
• (create$ <выражение>*)
81

82. Функция nth$

• Для получения конкретного поля составной
величины предназначена функция nth$.
• (nth$ <целое> <составная-величина>)
• Первый аргумент данной функции должен
быть целым числом, большим или равным 1,
который определяет индекс поля в составной
величине, заданной вторым аргументом.
• Если заданное число больше количества
элементов в составной величине, функция
вернет значение nil.
• Значение, возвращаемое функцией, в любом
случае является значением типа symbol.
82

83. Функция member$

• Функция member$ возвращает индекс поля,
если оно содержится в составной величине.
• (member$ <выражение> <составная-величина>)
• Если первый аргумент этой функции —
простая величина, которая является какимлибо полем второго аргумента, то функция
member$ вернет целое число — индекс
соответствующего поля.
83

84. Функция member$

• Если первый аргумент — составная
величина, и она представляет собой
часть второго аргумента, тогда функция
возвращает два индекса — начала и
конца первой составной величины во
второй величине.
• В противном случае функция возвращает
значение FALSE.
84

85. Функция subsetp

• Функция subsetp проверяет, не является
ли одна составная величина
подмножеством другой, т. е. содержатся
ли все поля первой составной величины
и во второй составной величине.
• (subsetp <составная-величина1>
<составная-величина2>)
• Порядок полей не оказывает влияния на
работу функции.
85

86. Функция subsetp

• Если первая составная величина является
подмножеством второй, функция
возвращает значение TRUE, в противном
случае — FALSE.
• В случае если первый аргумент имеет
нулевую длину, функция subsetp всегда
возвращает значение TRUE.
86

87.

87

88.

88

89. Функции explode$ и implode$

• Функции explode$ и implode$ предназначены
для преобразования строки в составную
величину и составной величины в строку
соответственно.
• Пустая строка создает составную величину
нулевой длины.
• Элементы строки типов, отличных от symbol,
string, integer, float или instance-name
(например, переменные), преобразуются в тип
string.
• (explode$ <строковое выражение>)
• (implode$ <составная-величина>)
89

90. Пример 5.12. Использование функций explode$ и implode$

90

91. Функция delete$

• Функция delete$ удаляет выбранные поля из
составной величины и возвращает
модифицированную составную величину, из
которой удален отрезок, заданный индексами
своего первого и последнего элемента.
• Если требуется удалить одно поле, то индекс
начала отрезка должен совпадать с индексом
конца.
• (delete$ <составная-величина> <индекс-начала>
<индекс-конца>)
91

92. Функция subseq$

• Для извлечения подпоследовательности
из составной величины служит функция
subseq$.
• Определение границ извлекаемой
подпоследовательности происходит так
же, как и у функции delete$.
• (subseq$ <составная-величина> <индексначала> <индекс-конца>)
92

93. Функция replace$

• Функция replace$ предназначена для замены
выбранного диапазона элементов составной
величины на заданную простую или составную
величину.
• Функция возвращает новую составную
величину, содержащую измененный фрагмент.
• (replace$ <изменяемая-составная-величина>
<индеке-начала> <индекс-конца>
<простая-или-составная-величина>+)
93

94. Функция insert$

• Для добавления нескольких простых или
составных величин в заданное место некоторой
составной величины предназначена функция
insert$.
• (insert$ <изменяемая-составная-величина>
<индекс-начала>
<простая-или-составная-величина>+)
• В качестве второго параметра эта функция
принимает целое число, являющееся индексом,
начиная с которого в заданную составную
величину будут добавлены новые поля.
94

95.

95

96. Функции first$ и rest$

• Для работы с составными переменными в
рамках парадигмы списков, которая часто
используется в различных логических языках
программирования, например Пролог, CLIPS
предоставляет функции first$ и rest$.
• (first$ <составная-величина>)
• (rest$ <составная-величина>)
• Первая функция возвращает в качестве
составного значения первое поле заданной
составной величины, а вторая — заданную
составную величину без первого поля.
96

97. Пример 5.14. Использование функций first$ и rest$

(first$ (create$ a b с)
(first$ (create$))
(rest$ (create$ a b с)
(rest$ (create$))
97

98. Функция length$

• Функция length$ возвращает число полей
(целый тип), содержащихся в составной
величине.
• Если параметр length$ не соответствует
необходимому типу, функция возвращает
— 1.
• (length$ <составная-величина>)
98

99. Функция delete-member$

• Функция delete-member$ удаляет все
вхождения заданных пользователем
элементов или составных величин из
начальной составной величины.
• (delete-member$ <составная-величина>
<выражение>+)
99

100. Функция replace-member$

• Для замены всех вхождений элементов или составных
величин из начальной составной величины на
некоторое выражение служит функция replacemember$.
• (replace-member$ <составная-величина> <выражение>
<простая-или-составная-величина>+)
• Первым аргументом этой функции является исходная
составная величина.
• Второй аргумент задает простое или составное
значение, на которое будут заменены все найденные
вхождения.
• Третий аргумент определяет произвольное количество
простых или составных элементов, которые
необходимо найти и заменить в исходной составной
величине.
100

101. Пример 5.15. Использование функций delete-member$ и replace-member$

Пример 5.15. Использование
функций delete-member$ и replacemember$
101

102. Глава 5. Основные функции CLIPS

§5.5. Функции ввода/вывода

103. Система ввода/вывода, CLIPS

• Система ввода/вывода, используемая CLIPS,
называется маршрутизацией ввода/вывода (I/O
routers).
• Одна из ключевых особенностей системы
маршрутизации ввода/вывода —
использование логических имен.
• Логические имена позволяют обращаться к
устройствам ввода/вывода унифицированным
способом, без необходимости учета
особенностей конкретного устройства.
• Логическое имя, созданное пользователем,
должно быть строкой, числом или
принадлежать типу symbol.
103

104. Предопределенные логические имена CLIPS

Имя
Описание
stdin
Логическое имя, определяющее устройство
по умолчанию, предназначенное для ввода
информации от пользователя. Если такое
имя определено, его используют функции
read и readln
stdout
Логическое имя, определяющее устройство
по умолчанию, предназначенное для
вывода информации для пользователя.
Если такое имя определено, его используют
функции printout и format
104

105. Предопределенные логические имена CLIPS

Имя
Описание
wclips
Логическое имя, определяющее
устройство, которое использует
справочная система CLIPS
wdialog
Устройство, ассоциированное с
данным
логическим
именем,
служит для отправки пользователю
информационных сообщений
105

106. Предопределенные логические имена CLIPS

Имя
Описание
wdisplay Отображение такой информации,
как правила, факты и т. д.,
производится
на
устройство,
ассоциированное
с
этим
логическим именем
werror
Данное логическое имя определяет
устройство, на которое будут
выводиться все сообщения об
ошибках
106

107. Предопределенные логические имена CLIPS

Имя
Описание
wwarning
Устройство, ассоциированное с
данным
логическим
именем,
используется для отображения
предупреждений
Вся
отладочная информация
посылается
на
устройство,
ассоциированное
с
данным
логическим именем
wtrase
107

108. Функция read

• Язык CLIPS позволяет считывать информацию с
клавиатуры с использованием функции read.
• Основной синтаксис read не требует ввода никаких
параметров.
• Пример использования функции read:
108

109. Функция read

109

110. Функция read

• Функция read может считать введенную лексему
только после нажатия клавиши ввода.
• Может использоваться для ввода одновременно
только одного поля. Все дополнительные знаки,
введенные после ввода первого поля, вплоть до
обозначения конца строки, отбрасываются.
• Пример диалога в командной строке:
110

111. Функция read

• Чтобы обеспечить чтение всего ввода, необходимо
заключить все поля в двойные кавычки.
• Пример диалога в командной строке:
• НЕДОСТАТОК: после обозначения вводимых
данных с помощью двойных кавычек эти данные
преобразуются в единственное литеральное поле,
поэтому исключается возможность легко получить
доступ к отдельным полям.
111

112. Функция read

• Позволяет также вводить поля, не являющиеся
символами, строками, целочисленными значениями
или числовыми значениями с плавающей точкой.
• Такие поля обозначаются двойными кавычками и
рассматриваются как строки.
• Пример диалога в командной строке:
112

113. Функция open

• Язык CLIPS обеспечивает не только ввод с
клавиатуры и вывод на терминал, но и позволяет
читать данные из файлов и записывать в файлы.
• Прежде, чем появится возможность получить
доступ к файлу для чтения или записи, файл
необходимо открыть с помощью функции open:
(open <имя-файла> <логическое-имя> [<параметроткрытия>])
• Количество файлов, которые могут быть открыты
одновременно, зависит от операционной системы и
применяемых в ней аппаратных средств.
• Функция open действует как предикативная
функция, возвращая значение TRUE, если
открытие файла прошло успешно. В противном
случае возвращается значение FALSE.
113

114. Функция open

• Функция принимает три аргумента:
• имя открываемого файла,
• логическое имя, которое будет
использоваться системой ввода/вывода
CLIPS для связи с этим файлом,
• параметр, определяющий способ открытия
файла.
• Пример:
114

115. Функция open

• Первый параметр <имя-файла> может
принадлежать типу string или symbol и
включать в себя как полный, так и
относительный путь к файлу.
• Если в качестве данного параметра
используется строка, то обратная косая черта
(\) и некоторые другие специальные символы
должны быть записаны при помощью
дополнительного знака обратной косой черты.
• Формат спецификации пути зависит от ОС.
115

116. Функция open

• Второй параметр < логическое-имя >
представляет собой логическое имя, которое
должно быть связано в системе CLIPS с
данным файлом.
• Логическое имя – глобальное имя, с помощью
которого обеспечивается возможность
получить доступ к файлу в системе CLIPS из
любого правила или приглашения верхнего
уровня.
• Может совпадать с именем файла, но
рекомендуется использовать другое имя для
предотвращения путаницы.
116

117. Функция open

• Преимущества использования логического
имени: простая замена одного имени файла на
другое без изменения программы.
• Имя файла используется только в функции
open, в дальнейшем ссылка на файл
осуществляется только по его логическому
имени, поэтому для обеспечения чтения из
другого файла достаточно внести изменения
лишь в вызов функции open.
117

118. Функция open

• Третий параметр [<параметр-открытия>] –
строка, представляющая один из возможных
режимов доступа к файлу.
• Если параметр, определяющий способ
открытия файла, не определен, то по
умолчанию файл будет открыт только для
чтения.
• ПРИМЕЧАНИЕ: в некоторых операционных
системах те или иные режимы доступа могут
оказаться неприменимыми.
118

119. Способы открытия файла

Значение
Описание
аргумента
“r”
Доступ только для чтения
“w”
Доступ только для записи
“r+"
Доступ для чтения и записи
"а"
Добавление только в конец
файла
Возможность записи двоичных
файлов
"wb"
119

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

• (open "myfile.clp" writeFile "w")
• (open "MS-DOS\\directory\\file.clp"
readFile)
120

121. Функция close

• Если доступ к файлу больше не требуется,
файл должен быть закрыт.
• Функция close закрывает файл, открытый
ранее функцией open. Конкретный файл
определяется при помощи логического имени,
присвоенного ему при открытии.
• (close [<логическое-имя>])
• Функция close возвращает значение TRUE,
если файл был благополучно закрыт, иначе она
возвращает значение FALSE.
121

122. Функция close

• Если параметр [<логическое-имя>]) не
задан, закрываются все открытые файлы.
• Если файл, открытый пользователем, не
был закрыт, возможна потеря последних
изменений, сделанных в файле.
122

123. Функция printout

• Функция printout позволяет выводить
информацию на устройство, связанное с
указанным логическим именем.
• Для отправки информации на устройство,
связанное с логическим именем stdout, обычно
используется его синоним — символ t.
• Если указано логическое имя nil, функция
printout не выполняет никаких действий.
• (printout <логическое-имя> <выражение>+)
123

124. Функция printout

• Функция printout принимает и выводит на
устройство, ассоциированное с заданным логическим
именем, любое число параметров.
• Символ crlf служит для перевода каретки на
следующую строку.
• Символы tab, vtab, и ff позволяют осуществлять
табуляцию, вертикальную табуляцию и переход на
новую страницу.
• Поведение функции printout при указании этих
специальных символов может меняться в
зависимости от используемой операционной
системы.
124

125. Функции open, printout, close

• Пример применения логических имен для записи в
файл:
125

126. Функции open, printout, close

• Открытие файла “example.dat” в режиме доступа для
записи для обеспечения записи в него данных. После
выполнения функции open логическое имя example
становится связанным с файлом “example.dat”.
• В файл “example.dat” записываются значения green и
7 с помощью логического имени example в качестве
первого параметра функции printout.
126

127. Функция read

• Дополнительный синтаксис функции read
позволяет считывать очередную порцию данных
с устройства, ассоциированного с заданным
логическим именем.
• read [<логическое-имя>])
• Если параметр <логическое-имя> определен,
функция попытается считывать информацию из
присоединенного к логическому имени файла.
127

128. Функция read

• Если параметр <логическое-имя> равняется t или
не определен, функция будет считывать данные
из устройства, связанного с stdin.
• Для отделения друг от друга элементов
считываемых данных служат разделители.
• Функция read всегда возвращает значение одного
из примитивных типов данных. Пробелы,
символы возврата каретки и табуляция
воспринимаются только как разделители и не
содержатся в полученном результате (если они не
заключены в двойные кавычки как часть строки).
128

129. Функция read

• Если в процессе чтения был достигнут конец
файла, функция вернет значение EOF.
• Если при чтении произошли ошибки, будет
возвращено значение "*** READ ERROR ***".
• Пример
129

130. Функция read

• Пример применения функции для выборки
значений из файла:
130

131. Функция readline

• Функция readline позволяет при каждом
использовании получать строку целиком, т.е. для
функции readline разделителями являются только
символ возврата каретки, точка с запятой или
символ конца файла (EOF). Пробелы, табуляция и
другие разделители воспринимаются функцией как
часть строки.
• Результатом работы функции readline является
строка.
• (readline [<логическое-имя>])
• Если логическое имя не задано или используется
логическое имя t, то входные данные считываются
со стандартного устройства ввода данных.
131

132. Функция readline

• Пример использования
132

133. Функция readline

• Пример использования
133

134. Функция format

• Функция служит для осуществления
форматированного вывода на устройство,
связанное с заданным логическим именем.
• Может быть использована вместо функции
printout, если необходимо специальное
форматирование выводимой информации.
• Функция format всегда возвращает строку,
содержащую форматированный вывод.
(format <логическое-имя> <строковое-выражение>
<параметры>*)
134

135. Функция format

• Первый аргумент функции определяет имя
логического устройства, на которое осуществляется
вывод. С помощью логического имени t может быть
указано применяемое по умолчанию стандартное
устройство вывода.
• Если в вызове функции format используется
логическое имя nil, то вывод каких-либо выходных
данных не производится (ни на терминал, ни в файл),
но возврат отформатированной строки все равно
выполняется.
135

136. Функция format

• Второй аргумент — управляющая строка, которая
должна быть заключена в двойные кавычки.
• Управляющая строка состоит из текста и флажков
формата, которые показывают, как должен
осуществляться вывод данных, обозначенных
параметрами функции format (третий аргумент).
• Количество флажков формата в управляющей строке
определяет количество задаваемых параметров.
• Спецификация флага форматирования:
%-M.Nx
136

137. Функция format

• Флажки формата всегда начинаются со знака процента, %.
• Знак минус (-) показывает, что вывод должен быть
выровнен влево, в противном случае выравнивание
осуществляется по правому краю.
• M и N — необязательные параметры, которые определяют
ширину поля в знаках и количество разрядов десятичного
числа.
• Если параметр M задан, данные будут выведены в поле
указанной длины.
• Для заполнения неиспользуемой части пространства
вывода, состоящего из M знаков, применяются пробелы.
137

138. Функция format

• Если M начинается с нуля (например, 07), символ 0
используется в качестве заполнителя пустого
пространства.
• Если выводимое значение превышает по ширине значение
M, то функция format расширяет поле вывода настолько,
насколько потребуется.
• Если параметр N не определен, по умолчанию выводится
шесть знаков после запятой.
• Буква х в спецификации представляет собой буквенное
значение, определяющее спецификацию формата
отображения:
138

139. Способы открытия файла

Флаг
Описание
с
Отображает параметр как простой символ
d
Отображает параметр как число типа long
integer (параметр N не учитывается)
f
Отображает параметр как число с плавающей
точкой
Отображает параметр как число с плавающей
точкой в экспоненциальной форме
е
g
Отображает параметр в экспоненциальной
форме
о
Отображает параметр как восьмеричное число
без знака (параметр N не учитывается)
139

140. Способы открытия файла

Флаг
Описание
x
n
Отображает
параметр
как
шестнадцатеричное
число
без
знака
(параметр N не учитывается)
Отображает параметр как строку, взятую в
кавычки
(параметр
N
определяет
максимальное число символов, которые
могут быть напечатаны)
Помещает в вывод перевод строки
r
Помещает в вывод возврат каретки
%
Помещает в вывод символ процента
s
140

141. Функция format

• Последний аргумент представляет собой список
параметров для форматирования, который управляет
процессом вывода строки.
• В качестве параметров могут применяться либо
значения констант, либо выражения.
141

142.

142

143. Функция rename

• Функция rename используется для изменения имени
файла.
• (rename <старое-имя> <новое-имя>)
• Оба параметра этой функции (<старое-имя> и <новоеимя>) должны быть значениями типа string или symbol
и могут содержать полный путь к файлу.
• Если для задания параметров используется строка, то
символ обратной косой черты (\) и другие специальные
символы в параметрах <старое-имя> и <новое-имя>
должны быть записаны при помощи дополнительного
знака обратной косой черты.
• Функция rename возвращает значение TRUE, если
операция изменения имени прошла успешно, и
значение FALSE — в противном случае.
143

144. Функция remove

• Для удаления файла используется
функция remove.
• (remove <имя-файла>)
• Здесь параметр <имя-файла> должен
быть значением типа string или symbol и
может содержать полный путь к файлу.
• Функция remove возвращает значение
TRUE в случае успеха и значение
FALSE— в случае неудачи.
144
English     Русский Правила