使显示矩阵prolog tkeclipse

使显示矩阵prolog tkeclipse,prolog,constraint-programming,eclipse-clp,Prolog,Constraint Programming,Eclipse Clp,我是prolog新手,希望从下面的prolog代码中生成一个显示矩阵,如下图所示。下图是使用tkEclipse(Eclipse for prolog)从给定的prolog代码生成的 下面是prolog的约束满足问题代码 :- lib(ic). :- lib(ech). :- local struct(fms(f1, f2, f3, f4)). :- local struct(fcs(pc1, cc1, hc2, pc2, hc3, pc4, cc4)). :- local struct(part

我是prolog新手,希望从下面的prolog代码中生成一个显示矩阵,如下图所示。下图是使用tkEclipse(Eclipse for prolog)从给定的prolog代码生成的 下面是prolog的约束满足问题代码

:- lib(ic).
:- lib(ech).
:- local struct(fms(f1, f2, f3, f4)).
:- local struct(fcs(pc1, cc1, hc2, pc2, hc3, pc4, cc4)).
:- local struct(part_family(fms, fcs, fvs, rms, prs)).
:- local struct(rms(rm1, rm2, rm3, rm4, rm5, rm6, rm7)).
:- local struct(fvs(pc1_1, pc1_2, cc1_1, cc1_2, hc2_1, hc2_2, pc2_1, hc3_1,
pc4_1, pc4_2, cc4_1)).
:- local struct(prs(pr1, pr2, pr3, pr4, pr5, pr6)).
:- constraints cc1/3, cc2/4, cc3/4, cc4/4, cc11/3, cc12/4.
cc1(A:L, B:M, Active)<=>memberd(A:L, Active),memberd(B:M, Active)|L $= M.
cc11(A:L, B:M, Active)<=>memberd(A:L, Active)|L $= M.
cc11(A:L, B:M, Active)<=>not memberd(A:L, Active)|M = 0.
cc12(A:L, B:M, C:N, Active)<=>memberd(A:L, Active),memberd(B:M, Active)|N $= (L
and M).
cc12(A:L, B:M, C:N, Active)<=>not memberd(A:L, Active)|N = 0.
cc12(A:L, B:M, C:N,Active)<=>not memberd(B:M, Active)|N = 0.
cc2(A:L, B:M, C:N, Active)<=>memberd(A:L, Active), memberd(B:M, Active),
memberd(C:N, Active)|L $= (M and N).

cc3(A:L, B:M, C:N, Active)<=>memberd(A:L, Active), memberd(B:M, Active),
memberd(C:N, Active)|L $= ((M and N) or (neg M and N)).
cc4(A:L, B:M, C:N, Active)<=>memberd(A:L, Active), memberd(B:M, Active),
memberd(C:N, Active)|L $= ((M and neg N) or (neg M and N)).
solve_dcsp(part_family(fms(f1:F1,f2:F2,f3:F3,f4:F4),
fcs(pc1:PC1,cc1:CC1,hc2:HC2,pc2:PC2,hc3:HC3,pc4:PC4,cc4:CC4),
fvs(pc1_1:PC1_1, pc1_2:PC1_2, cc1_1:CC1_1, cc1_2:CC1_2, hc2_1:HC2_1,
hc2_2:HC2_2, pc2_1:PC2_1, hc3_1:HC3_1, pc4_1:PC4_1, pc4_2:PC4_2,
cc4_1:CC4_1),
rms(rm1:RM1,rm2:RM2,rm3:RM3,rm4:RM4,rm5:RM5,rm6:RM6,rm7:RM7),
prs(pr1:PR1,pr2:PR2,pr3:PR3,pr4:PR4,pr5:PR5,pr6:PR6))):-[F1,F2,F3,F4]::[0,1],
[PC1,CC1,HC2,PC2,HC3,PC4,CC4]::[0,1],
[PC1_1,PC1_2,CC1_1,CC1_2,HC2_1,HC2_2,PC2_1,HC3_1,PC4_1,PC4_2,CC4_1]::[0,1],
[RM1,RM2,RM3,RM4,RM5,RM6,RM7]::[0,1],
[PR1,PR2,PR3,PR4,PR5,PR6]::[0,1],
Active = [f1:F1,f2:F2,f3:F3,f4:F4],
((F1 and F2 and F3 and neg F4) or (F1 and F2 and neg F3 and F4)) $=1,
find_solution(Active),
activate(f1:F1,[pc1:PC1,cc1:CC1],Active,New_active1),
activate(f2:F2,[pc2:PC2,hc2:HC2],New_active1,New_active2),
activate(f3:F3,[hc3:HC3],New_active2,New_active3),
activate(f4:F4,[pc4:PC4,cc4:CC4],New_active3,New_active4),
cc2(f1:F1,pc1:PC1,cc1:CC1,New_active4),
cc3(f2:F2,pc2:PC2,hc2:HC2,New_active4),
cc2(f4:F4,pc4:PC4,cc4:CC4,New_active4),
cc1(f3:F3,hc3:HC3,New_active4),
find_solution(New_active4),
activate(pc1:PC1,[pc1_1:PC1_1,pc1_2:PC1_2],New_active4,New_active5),
activate(cc1:CC1,[cc1_1:CC1_1,cc1_2:CC1_2],New_active5,New_active6),
activate(pc2:PC2,[pc2_1:PC2_1],New_active6,New_active7),

activate(hc2:HC2,[hc2_1:HC2_1,hc2_2:HC2_2],New_active7,New_active8),
activate(hc3:HC3,[hc3_1:HC3_1],New_active8,New_active9),
activate(pc4:PC4,[pc4_1:PC4_1,pc4_2:PC4_2],New_active9,New_active10),
activate(cc4:CC4,[cc4_1:CC4_1],New_active10,New_active11),
cc4(pc1:PC1,pc1_1:PC1_1,pc1_2:PC1_2,New_active11),
cc4(cc1:CC1,cc1_1:CC1_1,cc1_2:CC1_2,New_active11),
cc1(pc2:PC2,pc2_1:PC2_1,New_active11),
cc4(hc2:HC2,hc2_1:HC2_1,hc2_2:HC2_2,New_active11),
cc1(hc3:HC3,hc3_1:HC3_1,New_active11),
cc2(pc4:PC4,pc4_1:PC4_1,pc4_2:PC4_2,New_active11),
cc1(cc4:CC4,cc4_1:CC4_1,New_active11),
cc1(pc1_1:PC1_1,cc1_1:CC1_1,New_active11),
cc1(pc1_2:PC1_2,pc2_1:PC2_1,New_active11),
cc1(pc1_1:PC1_1,hc3_1:HC3_1,New_active11),
cc1(pc1_1:PC1_1,hc2_1:HC2_1,New_active11),
cc1(pc1_2:PC1_2,f4:F4,New_active11),
cc1(pc1_2:PC1_2,pc2:PC2,New_active11),
find_solution(New_active11),
cc11(pc1:PC1,rm1:RM1,New_active11),
cc11(cc1:CC1,rm2:RM2,New_active11),
cc11(pc2:PC2,rm3:RM3,New_active11),
cc11(hc2:HC2,rm4:RM4,New_active11),
cc11(hc3:HC3,rm5:RM5,New_active11),
cc11(pc4:PC4,rm6:RM6,New_active11),
cc11(cc4:CC4,rm7:RM7,New_active11),
cc12(hc2:HC2,pc1:PC1,pr1:PR1,New_active11),
cc12(pc1:PC1,cc1:CC1,pr2:PR2,New_active11),
cc12(hc2:HC2,hc3:HC3,pr3:PR3,New_active11),
cc12(hc2:HC2,pc4:PC4,pr4:PR4,New_active11),
cc12(pc4:PC4,cc4:CC4,pr5:PR5,New_active11),
cc11(pc4:PC2,pr6:PR6,New_active11),
find_solution([rm1:RM1, rm2:RM2, rm3:RM3, rm4:RM4, rm5:RM5, rm6:RM6, rm7:RM7,
pr1:PR1, pr2:PR2, pr3:PR3, pr4:PR4, pr5:PR5, pr6:PR6]),
print_configuration(part_family(fms(f1:F1, f2:F2, f3:F3, f4:F4),
fcs(pc1:PC1, cc1:CC1, hc2:HC2, pc2:PC2, hc3:HC3, pc4:PC4,
cc4:CC4),
fvs(pc1_1:PC1_1, pc1_2:PC1_2, cc1_1:CC1_1, cc1_2:CC1_2,
hc2_1:HC2_1, hc2_2:HC2_2, pc2_1:PC2_1, hc3_1:HC3_1,
pc4_1:PC4_1, pc4_2:PC4_2, cc4_1:CC4_1),
rms(rm1:RM1, rm2:RM2, rm3:RM3, rm4:RM4, rm5:RM5, rm6:RM6,
rm7:RM7),
prs(pr1:PR1, pr2:PR2, pr3:PR3, pr4:PR4, pr5:PR5,
pr6:PR6))).
find_solution([]):- true.
find_solution([_:D|Active1]):-indomain(D),
find_solution(Active1).
memberd(_,[]):-fail.
memberd(X:_,[H:_|_]):-X = H,!.
memberd(M:_,[_:_|Ts]):-memberd(M:_,Ts),!.
activate(_:Head,L2,Active,New_active):-((nonvar(Head),Head =1) -> add(L2,Active,New_active); New_active = Active).
add([],List2,New_list):- New_list=List2.
add([E1|Es],List2,New_list):-add(Es,[E1|List2],New_list).
print_configuration(part_family(Fms,Fcs,Fvs,Rms,Prs)):-writeln("Find the following configuration result:"),
write(" Function Modules:"),
(foreacharg(Fm,Fms) do write_configuration(Fm)),
nl,
write(" Feature Clusters:"),
(foreacharg(Fc,Fcs) do write_configuration(Fc)),
nl,
write(" Feature Variants:"),
(foreacharg(Fv,Fvs) do write_configuration(Fv)),
nl,
write(" RMOPs:"),
(foreacharg(Rm,Rms) do write_configuration(Rm)),
nl,
write(" Precedence relations:"),
(foreacharg(Pr,Prs) do write_configuration(Pr)),
nl.
write_configuration(A:B):-B==1-> write(A),write(" ");true.
:-lib(ic)。
:-lib(ech)。
:-本地结构(fms(f1、f2、f3、f4))。
:-本地结构(fcs(pc1、cc1、hc2、pc2、hc3、pc4、cc4))。
:-本地结构(零件族(fms、fcs、fvs、rms、prs))。
:-本地结构(rms(rm1、rm2、rm3、rm4、rm5、rm6、rm7))。
:-本地结构(fvs(pc1_1、pc1_2、cc1_1、cc1_2、hc2_1、hc2_2、pc2_1、hc3_1、,
pc4_1、pc4_2、cc4_1))。
:-本地结构(prs(pr1、pr2、pr3、pr4、pr5、pr6))。
:-约束条件cc1/3、cc2/4、cc3/4、cc4/4、cc11/3、cc12/4。
cc1(A:L,B:M,活动)成员D(A:L,活动),成员D(B:M,活动)| L$=M。
cc11(A:L,B:M,有效)成员D(A:L,有效)| L$=M。
cc11(A:L,B:M,有效)未加入(A:L,有效)| M=0。
cc12(A:L,B:M,C:N,活动)成员D(A:L,活动),成员D(B:M,活动)| N$=(L
和M)。
cc12(A:L,B:M,C:N,活动)未成员(A:L,活动)| N=0。
cc12(A:L,B:M,C:N,活动)未成员(B:M,活动)| N=0。
cc2(A:L,B:M,C:N,活动)成员D(A:L,活动),成员D(B:M,活动),
成员d(C:N,活动)| L$=(M和N)。
cc3(A:L,B:M,C:N,有效)成员D(A:L,有效),成员D(B:M,有效),
成员d(C:N,有效)| L$=((M和N)或(负M和N))。
cc4(A:L,B:M,C:N,主动)成员D(A:L,主动),成员D(B:M,主动),
成员D(C:N,有效)| L$=((M和负N)或(负M和N))。
求解零件族(fms(f1:f1,f2:f2,f3:f3,f4:f4),
fcs(pc1:pc1,cc1:cc1,hc2:hc2,pc2:pc2,hc3:hc3,pc4:pc4,cc4:cc4),
fvs(pc1_1:pc1_1,pc1_2:pc1_2,cc1_1:cc1_1,cc1_2:cc1_2,hc2_1:hc2_1,
hc2_2:hc2_2,pc2_1:pc2_1,hc3_1:hc3_1,pc4_1:pc4_1,pc4_2:pc4_2,
cc4_1:cc4_1),
rms(rm1:rm1,rm2:rm2,rm3:rm3,rm4:rm4,rm5:rm5,rm6:rm6,rm7:rm7),
pr(pr1:pr1,pr2:pr2,pr3:pr3,pr4:pr4,pr5:pr5,pr6:pr6)):-[F1,F2,F3,F4]:[0,1],
[PC1,CC1,HC2,PC2,HC3,PC4,CC4]:[0,1],
[PC1_1,PC1_2,CC1_1,CC1_2,HC2_1,HC2_2,PC2_1,HC3_1,PC4_1,PC4_2,CC4_1]::[0,1],
[RM1,RM2,RM3,RM4,RM5,RM6,RM7]:[0,1],
[PR1,PR2,PR3,PR4,PR5,PR6]:[0,1],
活动=[f1:f1,f2:f2,f3:f3,f4:f4],
((F1和F2以及F3和负F4)或(F1和F2以及负F3和F4))$=1,
查找解决方案(活动),
激活(f1:f1,[pc1:pc1,cc1:cc1],激活,新激活1),
激活(f2:f2,[pc2:pc2,hc2:hc2],新激活1,新激活2),
激活(f3:f3、[hc3:hc3]、新活动2、新活动3),
激活(f4:f4、[pc4:pc4、cc4:cc4]、新活动3、新活动4),
cc2(f1:f1,pc1:pc1,cc1:cc1,新活动4),
cc3(f2:f2,pc2:pc2,hc2:hc2,新活性4),
cc2(f4:f4,pc4:pc4,cc4:cc4,新活动4),
cc1(f3:f3,hc3:hc3,新活性4),
找到解决方案(新的活动4),
激活(pc1:pc1、[pc1\U 1:pc1\U 1、pc1\U 2:pc1\U 2]、新活动4、新活动5),
激活(cc1:cc1、[cc1\U 1:cc1\U 1、cc1\U 2:cc1\U 2]、新活动5、新活动6),
激活(pc2:pc2、[pc2\U 1:pc2\U 1]、新活动6、新活动7),
激活(hc2:hc2、[hc2_1:hc2_1、hc2_2:hc2_2]、新活动7、新活动8),
激活(hc3:hc3、[hc3\u 1:hc3\u 1]、新活动8、新活动9),
激活(pc4:pc4、[pc4\U 1:pc4\U 1、pc4\U 2:pc4\U 2]、新活动9、新活动10),
激活(cc4:cc4、[cc4\U 1:cc4\U 1]、新活动10、新活动11),
cc4(pc1:pc1,pc1\U 1:pc1\U 1,pc1\U 2:pc1\U 2,新活动11),
cc4(cc1:cc1,cc1\U 1:cc1\U 1,cc1\U 2:cc1\U 2,新活动11),
cc1(pc2:pc2,pc2_1:pc2_1,新活动11),
cc4(hc2:hc2,hc2_1:hc2_1,hc2_2:hc2_2,新的_11),
cc1(hc3:hc3,hc3_1:hc3_1,新_11),
cc2(pc4:pc4,pc4_1:pc4_1,pc4_2:pc4_2,新活动11),
cc1(cc4:cc4,cc4_1:cc4_1,新活动11),
cc1(pc1_1:pc1_1,cc1_1:cc1_1,新活动11),
cc1(pc1_2:pc1_2,pc2_1:pc2_1,新活动11),
cc1(pc1_1:pc1_1,hc3_1:hc3_1,新活动11),
cc1(pc1_1:pc1_1,hc2_1:hc2_1,新活动11),
cc1(pc1_2:pc1_2,f4:f4,新活动11),
cc1(pc1_2:pc1_2,pc2:pc2,新活动11),
找到解决方案(新的活动11),
cc11(pc1:pc1,rm1:rm1,新活动11),
cc11(cc1:cc1,rm2:rm2,新活动11),
cc11(pc2:pc2,rm3:rm3,新活动11),
cc11(hc2:hc2,rm4:rm4,新活动11),
cc11(hc3:hc3,rm5:rm5,新活动11),
cc11(pc4:pc4,rm6:rm6,新活动11),
cc11(cc4:cc4,rm7:rm7,新活动11),
cc12(hc2:hc2,pc1:pc1,pr1:pr1,新活动11),
cc12(pc1:pc1,cc1:cc1,pr2:pr2,新活动11),
cc12(hc2:hc2,hc3:hc3,pr3:pr3,新活动11),
cc12(hc2:hc2,pc4:pc4,pr4:pr4,新活动11),
cc12(pc4:pc4,cc4:cc4,pr5:pr5,新活动11),
cc11(pc4:PC2,pr6:pr6,新活动11),
找到解决方案([rm1:rm1,rm2:rm2,rm3:rm3,rm4:rm4,rm5:rm5,rm6:rm6,rm7:rm7,
pr1:pr1,pr2:pr2,pr3:pr3,pr4:pr4,pr5:pr5,pr6:pr6]),
打印配置(零件族)(fms(f1:f1,f2:f2,f3:f3,f4:f4),
fcs(pc1:pc1,cc1:cc1,hc2:hc2,pc2:pc2,hc3:hc3,pc4:pc4,
cc4:cc4),
fvs(pc1_1:pc1_1,pc1_2:pc1_2,cc1_1:cc1_1,cc1_2:cc1_2,
hc2_1:hc2_1,hc2_2:hc2_2,pc2_1:pc2_1,hc3_1:hc3_1,
pc4_1:pc4_1,pc4_2:pc4_2,cc4_1:cc4_1),
rms(rm1:rm1,rm2:rm2,rm3:rm3,rm4:rm4,rm5:rm5,rm6,,
7令吉:7令吉),,
prs(pr1:pr1,pr2:pr2,pr3:pr3,pr4:pr4,pr5:pr5,
pr6:pr6))。
查找解决方案([]):-true。
找到解决方案([[ud:Active1]):-indomain(D),
查找解决方案(Active1)。
memberd(,[]):-失败。
成员D(X:Uh:124; Uh]):-X=H,!。
成员(M:|,[| Ts]):-memberd(M:|,Ts),!。
激活(头,二级,激活,新激活):-((非激活(头,头=1)->添加(二级,激活,新激活);新激活=激活)。
添加([],列表2,新列表):-New\u list=List2。
添加([E1|Es],列表2,新列表):-add(Es[E1|List2],新列表)。
打印配置(部件系列(Fms、Fcs、Fvs、Rms、Prs)):-writeln(“查找以下配置结果:”),
写入(“功能模块:”),
(foreacharg(Fm,Fms)do write_配置(Fm)),
荷兰,
写入(“要素群集:”),
(foreacharg(Fc,Fcs)执行写入配置(Fc)),
荷兰,
写入(“功能变量:”),
(foreacharg(Fv,Fvs)do write_配置(Fv)),
荷兰,
写入(“RMOPs:”),
(foreacharg(Rm,Rms)do write_配置(Rm)),
荷兰,
写入(“优先关系:”),
(foreacharg(Pr,Prs)do write_配置(Pr)),
荷兰。
写入配置(A:B):-B==1->write(A),write(“”);对。

到目前为止,我已经生成了如下所示的显示矩阵。代码很好,问题主要是如何使用编译器生成这种显示。

您介意格式化您的代码吗,它非常不可读…代码非常完美@jsf。只是不知道如何使用tkeclipse来