Описание тега instantiation-error
"Конкретизация" ошибка возникает в прологе, когда аргумент недостаточно инстанцирован. Часто встречается с(is)/2
и встроенные средства арифметического сравнения, например (>)/2
, (=:=)/2
что все ожидают полностью инстанцированных, основных терминов (т.е. без неустановленных логических переменных в них) в качестве аргументов.
Во многих случаях доступны более общие предикаты, которые работают также, если их аргументы не полностью инстанциированы. Например, многие системы Prolog поддерживают ограничения CLP(FD).(#=)/2
а также (#>)/2
которые можно использовать как чистые альтернативы.
Другой способ действий - отложить вызов до тех пор, пока не будут созданы экземпляры всех аргументов, с помощью таких инструментов, как freeze/2
SWI Prolog (как видно, например, в этом ответе).