我正在使用 Prolog 来解决家庭作业的通用密码谜题。我将在SEND + MORE = MONEY
.
我的教授给我的部分代码将 3 个输入列表(即[S,E,N,D]
, [M,O,R,E]
, )减少[M,O,N,E,Y]
为一个唯一的变量列表,即[S,E,N,D,M,O,R,Y]
. 我已经达到了一个地步,我递归地为简化列表中的每个变量分配一个介于 0 和 9 之间的唯一值。
我的问题是,然后如何将缩减列表中的值重新分配给 3 个输入列表中的每一个中的值?我的代码如下:
solve_expression(L1,L2,L3) :-
variables(L1,L2,L3,L),
bind(L).
bind(L) :-
assign_members(L,[0,1,2,3,4,5,6,7,8,9]),
is_unique(L).
assign_members([],L) :-
is_unique(L).
assign_members([H|T],L) :-
member(H,L),
assign_members(T,L).
is_unique([H|T]) :-
unique(H,T),
is_unique(T).
is_unique([]).
/** professor's code below */
unique(_,[]).
unique(X,[Y|Z]) :-
X \== Y,
unique(X,Z).
merge([],L,L).
merge([X|Y],Z,[X|L]) :-
unique(X,Z),
!,
merge(Y,Z,L).
merge([_|Y],Z,L) :-
merge(Y,Z,L).
variables(A,B,C,V) :-
merge(A,B,W),
merge(C,W,V).
请记住,这是一个家庭作业,所以我不是在寻找答案,只是关于我如何完成这个的提示。另外,我只使用 Prolog 大约一个星期。
谢谢!