Добрый вечер, у меня простая проблема, и я предупреждаю вас, что я новичок в прологе.Предположим, у вас есть три списка одинакового размера, каждый из которых содержит только 1, 0 или -1.Я хочу проверить, что для всех i из i-го элемента трех списков один и только один ненулевой.
Этот код делает это для фиксированного i:
:- use_module(library(clpfd)).
compat1(V1,V2,V3,I) :-
length(V1,G),
nth1(I,V1,X),
nth1(I,V2,Y),
nth1(I,V3,Z),
W is X*X+Y*Y+Z*Z,
W is 1,
I in 1..G.
как я могу сказать "для ВСЕГО, я compat1 (V1, V2, V3, I)"?Я попытался определить
compat2(V1,V2,V3,1) :- compat1(V1,V2,V3,1).
compat2(V1,V2,V3,K) :- compat2(V1,V2,V3,J), compat1(V1,V2,V3,K), K is J+1.
, чтобы я мог вызвать его с K = максимальным значением, которое меня интересует. Но compat2 не работает: дает true, затем, после ";"работает бесконечно.
Спасибо!