Предположим, что я хочу найти два числа, в которых их сумма равна 8, составляет от 1 до 9 и должна быть разной (очевидно, что эти числа (7, 1), (6,2) и т. Д.). Так я и написал.Как найти два номера, где применяется ограничение?
dif_list([H|T]):- \+ member(H,T),dif_list(T).
dif_list([]).
check1_9([H|T]):-H>=1,H=<9,check1_9(T).
check1_9([]).
find_number([A,B],N) :- N =:= A+B,dif_list([A,B]),check1_9([A,B]).
После этого я попрошу пролога
?-find_number([A,B],8).
ERROR: =:=/2: Arguments are not sufficiently instantiated
Моя цель состоит в том, что пролог будет распечатываться для меня пример results.For:
?-find_number([A,B],8).
A = 7,
B = 1 ;
A = 6,
B = 2 ;
...
Вы уже приняли ответ перед своим UPDATE1. Здесь очень плохо, чтобы задать вопрос, получить законные ответы на этот вопрос, а затем изменить или усилить вопрос, используя эти ответы, а затем сделать ранее предоставленные ответы неполными или недействительными. Если у вас есть еще вопросы, задайте новый вопрос. Я голосую, чтобы закрыть этот вопрос, исходя из этого, неясно, что вы спрашиваете, поскольку он меняется после того, как уже даны ответы. – lurker
Вторые секунды: Пожалуйста, восстановите этот вопрос, для которого были даны действительные ответы, которые могут быть полезны и для других, и задайте новый вопрос для новой проблемы. – mat
Хорошо Я сделал это –