В зависимости от того, задан ли групповой параметр, метод может принимать точное число параметров или число параметров не меньшее, чем некоторое заданное. Обязательные параметры определяют минимальное число аргументов, которое должно быть передано методу при его вызове. В действиях, выполняемых методом, можно ссылаться на каждый из этих параметров так же, как на обычные переменные, содержащие простые значения. Если был задан групповой параметр, то метод может принимать любое количество аргументов — большее или равное минимальному числу аргументов. Если групповой параметр не задан, то метод может принимать число аргументов, равное числу обязательных параметров. Все аргументы метода, которые не соответствуют обязательным параметрам, группируются в одно значение составного поля. Ссылаться на это значение можно, указывая символ группового параметра. Для работы с групповым параметром могут использоваться стандартные функции 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 раза для каждого из трех аргументов.