The following eror “uncaught exception: error(instantiation_error,(is)/2)” appears after I execute the following code, and I dont know why.
% estado -> e(LinhaAgente, ColunaAgente, LinhaMáquina, ColunaMáquina)
estado_inicial(e(1, 2, 2, 2)).
estado_final(e(_, _, 7, 2)).
% restrições
%obstaculo(L, C) :- member((L, C), [(6, 1), (6, 3), (7, 4), (4, 4), (3, 4), (2, 4), (6, 7)]).
obstaculo(e(6, 1)).
obstaculo(e(6, 3)).
obstaculo(e(7, 4)).
obstaculo(e(4, 4)).
obstaculo(e(3, 4)).
obstaculo(e(2, 4)).
obstaculo(e(6, 7)).
lim(La, Ca) :-
between(1, 7, La),
between(1, 7, Ca).
iguais(A, A).
% operadores de estado -> op(estado_atual, operador, estado_seguinte, custo)
op(e(La, Ca, Lm, Cm), cima, e(Ls, Cs, Lms, Cms), 1) :-
Ls is La + 1,
(iguais(e(Ls, Ca), e(Lm, Cm)) ->
(
Lms is Lm + 1,
lim(Ls, Cm),
+ obstaculo(e(Lms, Cm))
);
(
Lms is Lm,
lim(Ls, Ca),
+ obstaculo(e(Ls, Ca))
)
).
I tried to do it without the “is”, but came to the conclution that is far simpler with the “is”.