Групповой параметр

В зависимости от того, задан ли групповой параметр, метод может прини­мать точное число параметров или число параметров не меньшее, чем неко­торое заданное. Обязательные параметры определяют минимальное число аргументов, которое должно быть передано методу при его вызове. В дейст­виях, выполняемых методом, можно ссылаться на каждый из этих парамет­ров так же, как на обычные переменные, содержащие простые значения. Если был задан групповой параметр, то метод может принимать любое ко­личество аргументов — большее или равное минимальному числу аргумен­тов. Если групповой параметр не задан, то метод может принимать число аргументов, равное числу обязательных параметров. Все аргументы метода, которые не соответствуют обязательным параметрам, группируются в одно значение составного поля. Ссылаться на это значение можно, указывая символ группового параметра. Для работы с групповым параметром могут использоваться стандартные функции CLIPS, предназначенные для работы с составными полями (см.гл. 15), такие как length и nth. Определение ме­тода может содержать только один групповой параметр.

Ограничения типом и запросом могут применяться к аргументам, сгруппи­рованным в групповом параметре, аналогично тому, как они употребляются с основными параметрами метода. Такие ограничения задаются для каждого отдельного поля результирующего составного значения (а не для всего зна­чения). Выражение, содержащее групповой символ, может быть применено в запросе.

Дополнительно в запросе может быть использована специальная перемен­ная?current-argument для ссылки на отдельные аргументы, объединенные групповым символом. Это переменная существует только в ограничении запросом и не имеет значения в теле метода. Метод из примера 10.4 иллю­стрирует версию функции +, которая находит полусумму любого количества четных целых чисел.

Пример 10.4. Еще один вариант функции +

(defmethod +

(($?any INTEGER (evenp?current-argument)))

(div (call-next-method} 2))

Ограничения по типу и запросу для группового параметра применяются к каждому аргументу, сгруппированному групповым символом, даже если для проверки используются функции для работы с составным значением. Таким образом, в примере 10.5 функции > и length$ вызываются 3 раза для каждого из трех аргументов.


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



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