【发布时间】:2023-12-30 17:32:01
【问题描述】:
我需要测试这段代码的二 + 二 = 四的加密算法,但它给了我错误,这是错误的。我需要知道为什么会这样。它适用于 donald+robert=gerald 或 it+is=me。我知道递归是如何工作的,但由于我无法调试它,我不知道出了什么问题。
sum(N1,N2,N) :-
sum1(N1,N2,N,0,0,[0,1,2,3,4,5,6,7,8,9], _).
sum1([], [], [], C,C,D,D).
sum1([D1|N1], [D2|N2], [D|N], CR, C, Digs1, Digs) :-
sum1(N1,N2,N, CR, CLN, Digs1, Digs2),
digsum(D1,D2, CLN, D, C, Digs2, Digs).
digsum(D1,D2, C1, D, C, Digs1, Digs) :-
del_var(D1, Digs1, Digs2),
del_var(D2, Digs2, Digs3),
del_var(D, Digs3, Digs),
S is D1+D2+C1,
D is S mod 10,
C is S // 10.
del_var(A,L,L) :-
nonvar(A), !.
del_var(A, [A|L], L).
del_var(A, [B|L], [B|L1]) :-
del_var(A,L,L1).
【问题讨论】:
-
我不确定您的问题到底是什么,但如果您需要调试某些内容,可以使用
trace.在提示符处打开跟踪。 -
一些调试想法:(1) 按照@qu4ntumcpa 的建议使用
trace,(2) 使用debug(predicate_name)调试/跟踪特定谓词,(3) 从Prolog 提示符查询特定谓词测试该谓词(例如,输入del_var(...)以测试del_var是否符合您的要求)和/或(4)使用一些write/1语句进行自定义跟踪。如果您需要更多帮助,您可能需要准确指明您为donald+robert=gerald等表达式输入的查询。
标签: prolog cryptarithmetic-puzzle