Eclipse 密码算术拼图帮助:圣诞老人=圣诞节

Eclipse 密码算术拼图帮助:圣诞老人=圣诞节,eclipse,prolog,puzzle,cryptarithmetic-puzzle,Eclipse,Prolog,Puzzle,Cryptarithmetic Puzzle,我正在尝试解决密码算术难题:ECLIPSE Prolog中的圣诞老人=圣诞节。我用“发送+更多=金钱”这个拼图作为指导。我的问题是,我不知道如何实现减法的“借用”部分。此外,还有一个结转,可以在您继续添加时添加到下一个术语中。但是在减法中,我们必须借用,从你借用的数字中减去十。下面是我作为指南使用的加法拼图的代码: solve([S,E,N,D,M,O,R,Y]) :- car(M), M > 0, car(C100), dig(S), S > 0, M is

我正在尝试解决密码算术难题:ECLIPSE Prolog中的圣诞老人=圣诞节。我用“发送+更多=金钱”这个拼图作为指导。我的问题是,我不知道如何实现减法的“借用”部分。此外,还有一个结转,可以在您继续添加时添加到下一个术语中。但是在减法中,我们必须借用,从你借用的数字中减去十。下面是我作为指南使用的加法拼图的代码:

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).

我只是需要帮助理解如何在减法中实现借用。

你不能将其实现为圣诞老人=圣诞老人+圣诞节吗?不,不幸的是我们必须进行减法。如果你编写的代码不起作用,我们可以帮你编写代码。我建议。同时…用英语写出来。这是一个开始(此时不承诺从右侧还是左侧开始):CarryInRightColumn*10+a-s是s。CarryInNextToRightColumn*10+T-U是一个+CarryInRightColumn。等等把它画在纸上,并在纸上留下空白,这可能会有帮助。谢谢你的建议!我能够使用从左到右的减法来实现它,因为它使“借款”的核算变得更容易。