ЕСЛИ-ТО в канонической форме?
Определяя ЕСЛИ так:
dynamic(if/1).
op(200, fx, if).
op(150, xfx, then).
op(100, xfy, and).
op(100, xfy, or).
генерирует следующую каноническую форму:
?- write_canonical(if x then y).
if(then(x,y))
?- write_canonical(if x and z then y).
if(then(and(x,z),y))
?- write_canonical(if x and z or t then y).
if(then(and(x,or(z,t)),y))
Есть ли способ сгенерировать:
if( conds, then(actions) ).
ИЛИ даже лучше:
if( conds, (actions) ).
как это:
if(x,y)
if(x, then(y))
if( and(x,or(z,t)), then(y))
if( and(x,or(z,t)), (y))
одну возможную альтернативу я вижу:)
?- op(200, xfy, ==>).
?- write_canonical(x ==> y).
==>(x,y)
?- write_canonical(x and z ==> y).
==>(and(x,z),y)
1 ответ
Я нашел лучшее решение для генерации нормальных предложений. Вместо "тогда" я могу просто использовать ":-"
?- write_canonical(if x and z :- y ).
:-(if(and(x,z)),y)
?- assert(if x and z :- write(axz) ).
?- if x and z.
axz