【发布时间】:2014-10-23 00:49:55
【问题描述】:
我正在尝试编写一个程序来解决一般的密码难题,例如 AM+PM=DAY、SEND+MORE=MONEY..
我写的程序是:
gsolve([H1,T1],[H2|T2],[H3|T3]):-
gsolvehelper([H1,T1],[H2|T2],[H3|T3],[0,1,2,3,4,5,6,7,8,9],0).
gsolvehelper([H1,T1],[H2|T2],[H3|T3],D,C):-
( var(H1)->select(H1,D,D1);D1=D),
( var(H2)->select(H2,D1,D2);D2=D1),
( X1 is H1+H2+C),
( H3 is mod(X1,10)),
( C1 is X1//10),
gsolvehelper(T1,T2,T3,D2,C1).
输入的格式为:
gsolve([A,M],[P,M],[D,A,Y]).
前两个列表的头部被添加到进位中以找到第三个列表的头部和新的进位等等。
我得到的错误是:
ERROR: is/2: Type error: `[]' expected, found `[2,_G3922]' ("x" must hold one character)
我无法弄清楚这个错误是什么。有人可以帮我解决这个问题吗?
【问题讨论】:
-
您显示的代码没有给出该错误消息。它给出了
'.'/2: ... [_Gxxxx],而不是is/2: ...[2,_Gxxxx],这可能意味着您出现了格式错误的列表构造(实际的列表谓词是'.',所以[H|T]在Prolog 中实际上是'.'(H,T))。 -
我确实收到与 USB 相同的错误消息(使用 SWI7)。
-
@false 你是对的,我应该在提出索赔之前进行适当的测试:我的错。由于 lurker 没有收到此错误,您知道它在各种 Prolog 中的行为方式吗?
-
SICStus、GNU、B、YAP。
标签: prolog cryptarithmetic-puzzle