私は暗号演算パズルを解こうとしています: ECLIPSE Prolog の SANTA-CLAUS=XMAS。そのためのガイドとしてパズル「SEND+MORE=MONEY」を使用しています。減算の「借りる」部分を実装する方法がわからないという私の問題。さらに、追加を続けると次の用語に追加できるキャリーオーバーがあります。しかし、引き算では、借りて、借りた数から 10 を引く必要があります。以下は、ガイドとして使用している足し算パズルのコードです。
solve([S,E,N,D,M,O,R,Y]) :-
car(M), M > 0, car(C100),
dig(S), S > 0,
M is (S+M+C100) // 10, O is (S+M+C100) mod 10,
dig(E), car(C10),
N is (E+O+C10) mod 10, C100 is (E+O+C10) // 10,
dig(R), car(C1),
E is (N+R+C1) mod 10, C10 is (N+R+C1) // 10,
dig(D),
Y is (D+E) mod 10, C1 is (D+E) // 10,
all_diff([S,E,N,D,M,O,R,Y]).
car(0). car(1).
dig(0). dig(1). dig(2). dig(3). dig(4).
dig(5). dig(6). dig(7). dig(8). dig(9).
all_diff([]).
all_diff([N|L]) :- not member(N,L), all_diff(L).
member(N,[N|L]).
member(N,[M|L]) :- member(N,L).
減算で借用を実装する方法を理解するのに助けが必要です。