Prolog-方程组求解器

Prolog-方程组求解器,prolog,clpfd,Prolog,Clpfd,我试图在prolog中创建一个紧凑的代码来解方程组 例如,在这种情况下,假设必须是 A+B-C-D=4,A+B+C+D=14,A-B+C-D=2。 我试着让它解A,B,C和D的所有可能组合,但满足所有3个方程。虽然它们只能是#的0-9,但却以某种方式显示了所有可能的解决方案/组合 因此,在运行查询之后,它将输出如下内容 加密(A、B、C、D) A=8,B=1,C=0,D=5。 ^这将是一个解决办法。但我需要展示所有可能的东西 我有点不知所措,不知道如何满足Prolog中的所有3个问题。谢谢。您可

我试图在prolog中创建一个紧凑的代码来解方程组

例如,在这种情况下,假设必须是

A+B-C-D=4,A+B+C+D=14,A-B+C-D=2。

我试着让它解A,B,C和D的所有可能组合,但满足所有3个方程。虽然它们只能是#的0-9,但却以某种方式显示了所有可能的解决方案/组合

因此,在运行查询之后,它将输出如下内容

加密(A、B、C、D)

A=8,B=1,C=0,D=5。

^这将是一个解决办法。但我需要展示所有可能的东西


我有点不知所措,不知道如何满足Prolog中的所有3个问题。谢谢。

您可以通过从变量域中取出一个元素并分配给它们来解决这个问题,这样每个变量都有一个不同的编号。这是一种暴力手段

takeout(X, [X|R], R).
takeout(X, [Y|Xs], [Y|Ys]):- takeout(X, Xs, Ys).

aas(X,L,L1):- takeout(X,L,L1).

crypto(A,B,C,D):-
        L=[0,1,2,3,4,5,6,7,8,9],
        aas(A,L,L1),aas(B,L1,L2),aas(C,L2,L3),aas(D,L3,_),
        A+B-C-D=:=4,
        A+B+C+D=:=14,
        A-B+C-D=:=2,
        nl.
aas(X,L,L1)。
用于为变量赋值。
takeout
函数用于取出一个元素,并返回一个不包括取出元素的列表

输出


该程序打印出该方程的所有可能解。A+B-C-D=4,A+B+C+D=14,A-B+C-D=2。希望这能回答您的问题。

您可以从变量域中取出一个元素并分配给它们,这样每个变量都有不同的编号。这是一种暴力手段

takeout(X, [X|R], R).
takeout(X, [Y|Xs], [Y|Ys]):- takeout(X, Xs, Ys).

aas(X,L,L1):- takeout(X,L,L1).

crypto(A,B,C,D):-
        L=[0,1,2,3,4,5,6,7,8,9],
        aas(A,L,L1),aas(B,L1,L2),aas(C,L2,L3),aas(D,L3,_),
        A+B-C-D=:=4,
        A+B+C+D=:=14,
        A-B+C-D=:=2,
        nl.
aas(X,L,L1)。
用于为变量赋值。
takeout
函数用于取出一个元素,并返回一个不包括取出元素的列表

输出


该程序打印出该方程的所有可能解。A+B-C-D=4,A+B+C+D=14,A-B+C-D=2。希望这能回答您的问题。

您应该看看SWI Prolog的库clpfd还有几个。您应该看看SWI Prolog的库clpfd也有几个。如果有人投了反对票,请随意提及原因也。我不会追他们的。但是,试着改进我的答案。你为什么坚持变量是不同的?这是一个神秘的总和。其中变量域范围为(0,9),每个变量应具有不同的值。这些是需要满足的基本约束。如果变量可以相同,那么可以做一件事,然后将
加密
查询重写如下
加密(A,B,C,D):-L=[0,1,2,3,4,5,6,7,8,9],aas(A,L,u),aas(B,L,u),aas(D,L,u),A+B-C-D==4,A+B+C+D==14,A-B+C-D==2,nl.
您将得到方程的所有可能解。如果有人投了反对票,请随时说明原因。我不会追他们的。但是,试着改进我的答案。你为什么坚持变量是不同的?这是一个神秘的总和。其中变量域范围为(0,9),每个变量应具有不同的值。这些是需要满足的基本约束。如果变量可以相同,那么可以做一件事,然后将
加密
查询重写如下
加密(A,B,C,D):-L=[0,1,2,3,4,5,6,7,8,9],aas(A,L,u),aas(B,L,u),aas(D,L,u),A+B-C-D==4,A+B+C+D==14,A-B+C-D==2,nl.
您将得到方程的所有可能解。