Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Активация правила, выполненная более новыми образцами, располагается перед активацией, осуществленной более поздними образцами. Для определения порядка размещения двух активаций правил, поодиночке сравниваются отсортированные временные теги для этих двух активаций, начиная с наибольшего временного тега. Сравнение продолжается до тех пор, пока не остается одна активация с наибольшим временным тегом. Эта активация размещается выше всех остальных в плане решения задачи.

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

В качестве примера рассмотрим следующие шесть активаций правил, приведенные в LEX-порядке (запятая в конце строки активации означает наличие логического элемента not). Учтите, что временные теги фактов не обязательно равны индексу, но если индекс факта больше, то больше и его временной тег. Для данного примера примем, что временные теги равны индексам.

rule-6: f-1, f-4

rule-5: f-1, f-2, f-3,

rule-1: f-1, f-2, f-3

НЕ нашли? Не то? Что вы ищете?

rule-2: f-3, f-1

rule-4: f-1, f-2,

rule-3: f-2, f-1

Далее показаны те же активации с индексами фактов в том порядке, в котором они сравниваются стратегией LEX.

rule-6: f-4, f-1

rule-5: f-3, f-2, f-1,

rule-1: f-3, f-2, f-1

rule-2: f-3, f-1

rule-4: f-2, f-1,

rule-3: f-2, f-1

• Стратегия MEA. Между правилами с одинаковым приоритетом только что активированные правила размещаются с использованием одноименной стратегии, впервые использованной в системе OPSS. Основное отличие стратегии MEA от LEX в том, что в стратегии MEA не производится сортировка образцов, активировавших правило. Сравниваются только временные теги первых образцов двух активаций. Активация с большим тегом помещается в план решения задачи перед активацией с меньшим. Если обе активации имеют одинаковые временные теги, ассоциированные с первым образцом, то для определения размещения активации в плане решения задачи используется стратегия LEX. Как и в стратегии LEX, условный элемент not имеет псевдовременной тег.

В качестве примера рассмотрим следующие шесть активаций, приведенные в MEA-порядке (запятая на конце активации означает наличие логического элемента not).

rule-2: f-3, f-1

rule-3: f-2, f-1

rule-6: f-1, f-4

rule-5: f-1, f-2, f-3,

rule-1: f-1, f-2, f-3

rule-4: f-1, f-2,

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

Для описания функций пользователя служит следующий конструктор.

(deffunction <имя-функции>

[<комментарии>] <обязательные-параметры>

[<групповой-параметр>] <действия>)

<обязательные-параметры> ::= <выражение-простое-поле>

<групповой-параметр> : := <выражение-составное-поле>

Синтаксис конструктора deffunction включает в себя 5 элементов:

− имя функции;

− необязательные комментарии;

− список из нуля или более параметров;

− необязательный символ групповых параметров для указания того, что функция может иметь переменное число аргументов;

− последовательность действий или выражений, которые будут выполнены (вычислены) по порядку в момент вызова функции.

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

Ссылаться на это значение можно, используя символ группового параметра. Для работы с групповым параметром могут использоваться стандартные функции CLIPS, предназначенные для работы с составными полями, такие как length и nth. Определение функции может содержать только один групповой параметр.

CLIPS>

(deffunction print-args (?a? b $?c)

(printout t? a " " ?b " and " (length? c) " extras: " ?c crlf))

CLIPS> (print-args 1 2)

1 2 and 0 extras: ()

CLIPS> (print-args a b c d)

a b and 2 extras: (c d)

CLIPS> (print-args a)

[ARGACCESS4] Function print-args expected at least 2 argument(s)

CLIPS>

В данном примере с помощью конструктора deffunction определяется функция print-args, которая принимает два обязательных параметра: ?а и? b, и имеет групповой параметр $?с. Функция выводит на экран свои обязательные параметры, а также число полей в составном параметре и его содержимое.

При вызове функции интерпретатор CLIPS последовательно выполняет действия в порядке, заданном конструктором.

Функция возвращает значение, равное значению, которое вернуло последнее действие или вычисленное выражение. Если последнее действие не вернуло никакого результата, то выполняемая функция также не вернет результата (как в приведенном выше примере). Если функция не выполняет никаких действий, то возвращенное значение равно FALSE. В случае возникновения ошибки при выполнении очередного действия выполнение функции будет прервано и возвращенным значением также будет FALSE.

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

(deffuction factorial (?a)

(if (or (not (integerp? a)) (< ?a 0)) then

(printout t "Factorial error! " crlf)

else

(if (= ?a 0) then 1 else

(* ?a (factorial (- ?a 1))))))

Взаимная рекурсия между двумя функциями требует предварительного объявления одной из этих функций. Для предварительного объявлении функции в CLIPS используется конструктор deffunction с пустым списком действий. В следующем примере функция foo предварительно объявлена и таким образом может быть вызвана из функции bar. Окончательная реализация функции foo выполнена конструктором после объявления функции bar.

(deffunction foo ())

(deffunction bar () (foo))

(deffunction foo () (bar))

Команда ppdeffunction выводит определение заданной функции на экран.

(ppdeffunction <имя-функции>)

Команда list-deffunctions предназначена для отображения в диалоговом окне списка имен всех определенных в системе функций.

(list-deffunctions)

Для удаления функций, определенных пользователем с помощью конструкторов deffunction, предназначена команда

undeffunction.

(undeffunction <имя-функции>)

В качестве параметра <имя-функции> возможно использование символа *. В этом случае команда попытается удалить все определенные пользователем функции. Удаление функции закончится неудачей, если выбранная функция в данный момент используется или выполняется (например, правилом).

CLIPS поддерживает следующие процедурные функции, реализующие возможности ветвления, организации циклов в программах и т. п.:

If – оператор ветвления;

While – цикл с предусловием;

loop-for-count – итеративный цикл;

prong – объединение действий в одной логической команде;

prong$ – выполнение набора действий над каждым элементом поля;

return – прерывание функции, цикла, правила и т. д.;

break – то же, что и return, но без возвращения параметров;

switch – оператор множественного ветвления;

bind – создание и связывание переменных.

Среди логических функций (возвращающих значения true или false) следует выделить такие группы:

• функции булевой логики: and, or, not;

• функции сравнения чисел: =, ≠, >, ≥, <, ≤;

предикативные функции для проверки принадлежности проверяемому типу: integerp, floatp, stringp, symbolp, pointerp

(относится ли аргумент к xternal-address), numberp (относится ли аргумент к integer или float), lexemerp (относится ли аргумент к string или symbol), evenp (проверка целого на четность), oddp (проверка целого на нечетность), multifildp (является ли аргумент составным полем);

• функции сравнения по типу и по значению: eq, neq.

Среди математических функций следует выделить следующие группы:

• Стандартные: +, –, *, /, max, min, div (целочисленное деление), abs (абсолютное значение), float (преобразование в тип float), integer (преобразование в тип integer);

• Расширенные: sqrt (извлечение корня), round (округление числа), mod (вычисление остатка от деления);

• Тригонометрические: sin, sinh, cos, cosh, tan, tanh, acos, acosh, acot, acoth, acsc, acsch, asec, asech, asin, asinh, atan, atanh,

cot, coth, csc, csch, sec, sech, deg-grad (преобразование из градусов в секторы), deg-rad (преобразование из градусов в радианы), grad-deg (преобразование из секторов в градусы), rad-deg (преобразование из радиан в градусы);

• Логарифмические: log, log10, exp, pi.

Среди функций работы со строками следует назвать функции:

str-cat – объединение строк;

sym-cat – объединение строк в значение типа symbol;

sub-string – выделение подстроки;

str-index – поиск подстроки;

eval – выполнение строки в качестве команды CLIPS;

build – выполнение строки в качестве конструктора CLIPS;

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6