Из клипов официальной документации я вижу следующее
"The restriction string for a function requiring exactly six arguments (of which the first must be a string, the third an integer, and the remaining arguments floats) is:
"66fsui" "
Может кто-нибудь заставить меня понять, что это значит и как действует приведенное выше утверждение?
На самом деле я получаю сообщение об ошибке при попытке изменить третий параметр из целого числа в строку .. Ранее is_configured принимает «33iiii», теперь я изменил его на «33iisi»
Это код
Я изменился, раньше это работало нормально .. рабочий код Я прокомментировал это в следующих строках
(object (is-a VEHICLE)
(NUMBER 1)
(IDX ?ID_X)
(IDY ?ID_Y)
;; not using ID_Z in the call below and using STRING_Z
(IDZ ?ID_Z)
(STRINGZ ?STRING_Z)
)
=>
(if (is_configured ?ID_X ?ID_Y ?STRING_Z) then
;;(if (is_configured ?ID_X ?ID_Y ?ID_Z) then
(assert (ELIGIBLE_FOR_CALCULATION ?ID_X ?ID_Y ?ID_Z))
)
И код C ++ выглядит так
bool clips_is_configured()
{
DATA_OBJECT doTemp;
long id_x= 0;
long id_y = 0;
std::string string_z;
//long id_z = 0;if (ArgCountCheck("is_configured", EXACTLY, 3) == -1)
return -1;if (ArgTypeCheck("is_configured", 1, INTEGER, &doTemp) == 0)
return -1;
id_x = (long) DOToLong(doTemp);if (ArgTypeCheck("is_configured", 2, INTEGER, &doTemp) == 0)
return -1;
id_y = (long) DOToLong(doTemp);// if (ArgTypeCheck("is_configured", 3, INTEGER, &doTemp) == 0)
if (ArgTypeCheck("is_configured", 3, STRING, &doTemp) == 0)
return -1;
string_z = DOToString(doTemp);
//id_z = (long) DOToLong(doTemp);
bool x;
...........
// do some calulations based on above values and return bool
...........
return x;
}
Я получаю следующую ошибку
[RULECSTR3] Previous variable bindings of ?ID_Y caused the type restrictions for argument #2 of the expression (is_configured ?ID_X ?ID_Y ?STRING_Z) found in the rule's RHS to be violated.
На самом деле я дал неправильный формат … правильный формат «33iiis» первый я указывает тип по умолчанию для параметров, если не указано
второй я указывает тип первого параметра
третий я указывает тип второго параметра
первый s указывает тип третьего параметра
Спасибо
Других решений пока нет …