Prolog矩阵方程

Prolog矩阵方程,prolog,clpfd,Prolog,Clpfd,我是Prolog新手,我想做一些类似的事情,但不知道从哪里开始。已经制作了矩阵,如何用边界库验证数字是否在9以下,但仅此而已,已经为此奋斗了好几天 应该是这样的: 2+7-4=5 + - * 9-5*2=8 - + - 4*3-8=4 = = = 7 5 0 m3x3_zs(Mss,Zs) :- Mss = [[M11,M12,M13], [M21,M22,M23], [M31,M32,M33]], Zs = [ M11,M12,M13 , M21,M22,M23 , M31

我是Prolog新手,我想做一些类似的事情,但不知道从哪里开始。已经制作了矩阵,如何用边界库验证数字是否在9以下,但仅此而已,已经为此奋斗了好几天

应该是这样的:

2+7-4=5
+ - *
9-5*2=8
- + -
4*3-8=4
= = =
7 5 0
m3x3_zs(Mss,Zs) :- Mss = [[M11,M12,M13], [M21,M22,M23], [M31,M32,M33]], Zs = [ M11,M12,M13 , M21,M22,M23 , M31,M32,M33 ], Zs ins 0..9, 5 #= M11+M12-M13, % row constraints 8 #= (M21-M22)*M23, % (see text below for details) 4 #= M31*M32-M33, 7 #= M11+M21-M31, % column constraints 5 #= M12-M22+M23, 0 #= M13*M23-M33. 主要思想是给Prolog一个半填充矩阵,这样他就可以完成它。谢谢你能提前给我的任何信息或想法

通过放置具有给定数字的运算符来解析方程的代码:

:- use_module(library(bounds)).

lista([X])   --> [X].
lista([H|T]) --> [H], op, lista(T).

op --> [+].
op --> [-].
op --> [*].
op --> [/].
op --> [''].

puzzle(Num, Res) :-
   permutation(Num, Numbperm),
   lista(Numbperm, Lista, []),
   concat_atom([Res, =:=|Lista], At),
   term_to_atom(Ev, At),
   call(Ev),
   write(Ev), nl.
要利用,就让我们利用,不要

我们可以这样陈述约束条件:

2+7-4=5
+ - *
9-5*2=8
- + -
4*3-8=4
= = =
7 5 0
m3x3_zs(Mss,Zs) :- Mss = [[M11,M12,M13], [M21,M22,M23], [M31,M32,M33]], Zs = [ M11,M12,M13 , M21,M22,M23 , M31,M32,M33 ], Zs ins 0..9, 5 #= M11+M12-M13, % row constraints 8 #= (M21-M22)*M23, % (see text below for details) 4 #= M31*M32-M33, 7 #= M11+M21-M31, % column constraints 5 #= M12-M22+M23, 0 #= M13*M23-M33. 再具体一点怎么样?哪些解决方案中有<代码> 4 <代码>中间?

?- m3x3_zs(Mss,Zs), Mss=[_,[_,4,_],_], labeling([],Zs). Mss = [[0,7,2],[8,4,2],[1,8,4]], Zs = [0,7,2,8,4,2,1,8,4] ; Mss = [[1,7,3],[8,4,2],[2,5,6]], Zs = [1,7,3,8,4,2,2,5,6] ; Mss = [[2,7,4],[8,4,2],[3,4,8]], Zs = [2,7,4,8,4,2,3,4,8] ; Mss = [[4,1,0],[5,4,8],[2,2,0]], Zs = [4,1,0,5,4,8,2,2,0] ; Mss = [[5,1,1],[5,4,8],[3,4,8]], Zs = [5,1,1,5,4,8,3,4,8]. ?-m3x3_zs(Mss,zs),Mss=[[uu,[[uu,4,[uz],[uz],标记([],zs)。 Mss=[[0,7,2],[8,4,2],[1,8,4]],Zs=[0,7,2,8,4,2,1,8,4] ; Mss=[[1,7,3],[8,4,2],[2,5,6]],Zs=[1,7,3,8,4,2,2,5,6] ; Mss=[[2,7,4],[8,4,2],[3,4,8]],Zs=[2,7,4,8,4,2,3,4,8] ; Mss=[[4,1,0],[5,4,8],[2,2,0]],Zs=[4,1,0,5,4,8,2,2,0] ; Mss=[[5,1,1],[5,4,8],[3,4,8],Zs=[5,1,1,5,4,8,3,4,8]。
你已经有任何prolog代码了吗?你试过什么?看一看clp(fd)添加了一个简短的代码,到目前为止我所拥有的一切@通过阅读获得信息。