Я изучаю Пролог. Я работаю над заданием. Я уже подготовил код, который частично работает. Но, как-то он дает несколько дубликатов ответов.Как я могу предотвратить, чтобы этот код Prolog дал несколько дубликатов ответа?
Возникает вопрос:
% Every letter represents a Digit (0,...,9).
% Leading digits (S and M) can not be 0.
% S E N D
% + M O R E
% ---------
% M O N E Y
% Write a Prolog program that solves the quiz, i.e., that finds the
% appropriate values for S,E,N,D,M,O, ... such that the addition is correct.
Решение, которое я придумал это:
jobs1([0,1,2,3,4,5,6,7,8,9]).
solution1([_,_,S,E,N,D,M,O,R,Y],
constraints([
\+ S is 0,
\+ M is 0,
0 is (10000*M+1000*O+100*N+10*E+Y - (1000*S+100*E+10*N+D + 1000*M+100*O+10*R+E)) ])).
puzzle1(Erg) :- write("Puzzle1 "), nl, jobs1(S),
solution1([_,_|Erg] ,
constraints(Cs)),permC(S,[_,_|Erg],Cs) .
Но, когда я запускаю этот код, я получаю ответы, как это:
7 ?- puzzle1(S).
Puzzle1
S = [9, 5, 6, 7, 1, 0, 8, 2] ;
S = [9, 5, 6, 7, 1, 0, 8, 2] ;
Я знаю, почему это происходит (потому что я игнорирую первые 2 позиции и из-за их перестановки результат показывает 2 раза). Можете ли вы, пожалуйста, помочь понять, как я могу удалить его, не используя! (Потому что, если есть несколько ответов, будет показан только первый ответ, чего не ожидается.)
Заранее благодарен!
Почему у вас есть ведущий '_' в первом аргументе' solution1'? –
Потому что я должен назначить 0,1, ... 9 символам S, E, N, D, M, O, R, Y. Итак, я должен был положить туда _, _ там. В противном случае программа возвращает false. –
Как выглядит определение 'permC/3'? – repeat