Prolog矩阵方程
我是Prolog新手,我想做一些类似的事情,但不知道从哪里开始。已经制作了矩阵,如何用边界库验证数字是否在9以下,但仅此而已,已经为此奋斗了好几天 应该是这样的: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
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)添加了一个简短的代码,到目前为止我所拥有的一切@通过阅读获得信息。