Мы внедряем диагностические инструменты для объяснения неожиданного универсального прерывания в чистых, монотонных программах Prolog на основе концепции срез сбоя.
Как указано в документе "Локализация и объяснение причин для программы с незавершенной логикой с фрагментами отказа ", цели false/0
добавляются в нескольких точках программы, чтобы уменьшить размеры фрагментов программы кандидатов объяснения (при сохранении незавершенности).
Пока все хорошо ... Итак, мой вопрос 1:
Почему N + 1 программных баллов в предложении, имеющем N целей?
Или, точнее:
Почему этого не хватает N баллов? Нужна ли нам когда-нибудь (N + 1) -я программная точка?
Не могли бы мы вместо этого переместить это
false
на каждое использование рассматриваемого предиката?Также мы знаем, что фрагмент программы используется только для запросов типа
?- G, false.
Сноска 1: Мы предполагаем, что каждый факт foo(bar,baz).
рассматривается как правило foo(bar,baz) :- true.
.
slicep(...,FVect) ← arg(n1,FVect,1), sliceq(...,FVect), arg(n2,FVect,1), ..., arg(ni,FVect,1), slicer(...,FVect), arg(ni+1,FVect,1).
Итак, IMO, проблема на основе 0 и 1 возникает только из-за использованияarg/3
, чтобы гарантировать, что мы не пройдем мимо вставленной целиfalse
. Итак, я бы сказал, что причина того, что индексы, основанные на 0/1, - это использованиеarg/3
, вы не согласны? - person repeat   schedule 15.02.2016{5,1,3}
вы выделяете пункты, которые должны быть ложными, но на самом деле упоминаются пункты, которые должны быть истинными. - person false   schedule 15.02.2016