Similar presentations:
Основные функции CLIPS
1. Глава 4
Основные функции CLIPS2. Функции в 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.
1516. Функции сравнения чисел
• Помимо функций 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. Функция +
3031. Функция –
• Функция – возвращает значение еепервого аргумента минус все
последующие.
• (- <выражение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. Функция /
3536. Функция div
• Функция div возвращает частное отделения первого аргумента на каждый из
последующих.
• Все аргументы данной функции
автоматически преобразуются в целые
для выполнения целочисленного
деления.
• Функция возвращает значение типа
integer.
• (div <выражение1> <выражение2>+)
36
37. Функция div
3738. Функции max и min
• Предназначены для нахождениянаибольшего и наименьшего аргумента
соответственно.
• При необходимости, аргументы типа integer
временно преобразуются в тип float для
выполнения сравнения.
• Возвращаемое значение может быть как
целого, так и вещественного типа (в
зависимости от типа наибольшего или
наименьшего аргумента).
• (max <выражение>+) (min <выражение>+)
38
39. Функции max и min
3940. Функция 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. Расширенные математические функции, не вошедшие в подгруппу тригонометрических функции
4546. Тригонометрические функции
ФункцияОписание
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
5455. Функция round
• Функция round округляет свой аргументдо ближайшего целого числа.
• Если аргумент находится точно между
двумя целыми числами, то он
округляется к меньшему числу.
• Тип возвращаемого результата — integer.
• (round <выражение>)
55
56. Функция mod
• Функция mod возвращает остаток отделения первого аргумента на второй,
предполагая, что результат деления
должен быть целочисленным.
• Функция возвращает значение типа
integer, если оба аргумента
целочисленные.
• В противном случае функция возвращает
вещественный результат.
• (mod <выражение1> <выражение2>)
56
57. Функция mod
5758. Глава 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
6465. Функция 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
6869. Функции upcase и lowcase
• Функции upcase и lowcase служат дляпреобразования всех символов заданной
строки в верхний и нижний регистр
соответственно.
• Аргумент функций должен принадлежать
одному из типов: symbol или string.
• Возвращаемый результат соответствует типу
получаемого аргумента.
• (upcase <строка>)
• (lowcase <строка>)
69
70. Пример 5.7. Использование функций upcase и lowcase
7071. Функция 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
7374. Функция 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
7778. Функция 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.
8788.
8889. Функции explode$ и implode$
• Функции explode$ и implode$ предназначеныдля преобразования строки в составную
величину и составной величины в строку
соответственно.
• Пустая строка создает составную величину
нулевой длины.
• Элементы строки типов, отличных от symbol,
string, integer, float или instance-name
(например, переменные), преобразуются в тип
string.
• (explode$ <строковое выражение>)
• (implode$ <составная-величина>)
89
90. Пример 5.12. Использование функций explode$ и implode$
9091. Функция delete$
• Функция delete$ удаляет выбранные поля изсоставной величины и возвращает
модифицированную составную величину, из
которой удален отрезок, заданный индексами
своего первого и последнего элемента.
• Если требуется удалить одно поле, то индекс
начала отрезка должен совпадать с индексом
конца.
• (delete$ <составная-величина> <индекс-начала>
<индекс-конца>)
91
92. Функция subseq$
• Для извлечения подпоследовательностииз составной величины служит функция
subseq$.
• Определение границ извлекаемой
подпоследовательности происходит так
же, как и у функции delete$.
• (subseq$ <составная-величина> <индексначала> <индекс-конца>)
92
93. Функция replace$
• Функция replace$ предназначена для заменывыбранного диапазона элементов составной
величины на заданную простую или составную
величину.
• Функция возвращает новую составную
величину, содержащую измененный фрагмент.
• (replace$ <изменяемая-составная-величина>
<индеке-начала> <индекс-конца>
<простая-или-составная-величина>+)
93
94. Функция insert$
• Для добавления нескольких простых илисоставных величин в заданное место некоторой
составной величины предназначена функция
insert$.
• (insert$ <изменяемая-составная-величина>
<индекс-начала>
<простая-или-составная-величина>+)
• В качестве второго параметра эта функция
принимает целое число, являющееся индексом,
начиная с которого в заданную составную
величину будут добавлены новые поля.
94
95.
9596. Функции 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
109110. Функция 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.
142143. Функция rename
• Функция rename используется для изменения именифайла.
• (rename <старое-имя> <новое-имя>)
• Оба параметра этой функции (<старое-имя> и <новоеимя>) должны быть значениями типа string или symbol
и могут содержать полный путь к файлу.
• Если для задания параметров используется строка, то
символ обратной косой черты (\) и другие специальные
символы в параметрах <старое-имя> и <новое-имя>
должны быть записаны при помощи дополнительного
знака обратной косой черты.
• Функция rename возвращает значение TRUE, если
операция изменения имени прошла успешно, и
значение FALSE — в противном случае.
143
144. Функция remove
• Для удаления файла используетсяфункция remove.
• (remove <имя-файла>)
• Здесь параметр <имя-файла> должен
быть значением типа string или symbol и
может содержать полный путь к файлу.
• Функция remove возвращает значение
TRUE в случае успеха и значение
FALSE— в случае неудачи.
144