如何防止此 Prolog 代码给出多个重复答案?
How can I prevent this Prolog code to give multiple duplicate answer?
我正在学习序言。我正在做一项作业。我已经生成了一些代码,可以部分使用。但是,不知何故,它给出了多个重复的答案。
问题是:
% 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 次)。您能否帮助理解如何在不使用的情况下删除它!(因为,如果有多个答案,!将只显示第一个答案,这不是预期的。)
提前致谢!
您的代码会尝试 10 位数字的每个排列,并报告每个符合约束的排列。你只显示 8,但还有 2 个,因此有 2 个不同的排列,最后 8 位数字相同。因此,例如,您可以添加您不关心的数字按特定顺序排列的要求,这样只有 1 种排列是可以接受的。
我正在学习序言。我正在做一项作业。我已经生成了一些代码,可以部分使用。但是,不知何故,它给出了多个重复的答案。
问题是:
% 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 次)。您能否帮助理解如何在不使用的情况下删除它!(因为,如果有多个答案,!将只显示第一个答案,这不是预期的。)
提前致谢!
您的代码会尝试 10 位数字的每个排列,并报告每个符合约束的排列。你只显示 8,但还有 2 个,因此有 2 个不同的排列,最后 8 位数字相同。因此,例如,您可以添加您不关心的数字按特定顺序排列的要求,这样只有 1 种排列是可以接受的。