У меня экзамен подходит, и я просматриваю прошлые документы, чтобы помочь понять.Constraint - SWI-Prolog Queries
я наткнулся на следующий вопрос бумаги прошлого:
Рассмотрим следующие вопросы и ответы. Некоторые ответы совпадают с , что будет делать SWI-Prolog, тогда как другие ошибочны. Укажите, какие ответы являются подлинными и какие из них являются поддельными (никакое объяснение вашего ответа не требуется ).
(i) |?- [A, B, C] ins 0 .. 2, A #= B + C.
A = 0..2 B = 0..2 C = 0..2
(ii) |?- A in 0 .. 3, A * A #= A.
A = 0..2
(iii) |?- [A, B] ins -1 .. 1, A #= B.
A = 1 B = 1
(iv) |?- [A, B] ins 0 .. 3, A #= B + 1.
A = 1..3 B = 1..2
Я изо всех сил, чтобы увидеть, как каждый из них является истинным или ложным. Кто-нибудь сможет объяснить мне, как это понять.
Спасибо, очень ценю помощь.
mmmh ... на самом деле в вопросе не упоминаются остатки. В случае i), я получаю 'A = 0..2 B = 0..2 C = 0..2' * и * остаточный' B + C# = A'. – CapelliC
Для случая (i) вы получаете остаточные цели 'A в 0..2, B в 0..2, C в 0..2' и' B + C# = A'. Это декларативно эквивалентно исходному запросу. Если вы получили только «A в 0..2, B в 0..2, C в 0..2', то остаточная программа была бы неправильно * более общей *, чем исходный запрос. Остаточная программа всегда должна быть декларативно эквивалентна исходному запросу. Если вы получаете 'A = 0..2' среди других остатков, то' A' не является даже целым числом, а термином '0..2'. Если, как и в 'A = 0..2 B = 0..2', ответ даже не синтаксически важен, то он определенно подделка. – mat