📄 zuhe1.chr
字号:
%%注释写在了每个程序段的上方
%%约束声明
constraints ctr/3,ctr/5,ctz/7,ctd/3,ctd/4,ctrd/6,ctp/3,ctp/5,chongtu/2.
%%反转的具体实现
invv([],[]).
invv([H|T],[MH|MT]):-inv(H,MH),invv(T,MT).
%%组合的具体实现
comp([H1|T1],[H2|T2],L):-composition(H1,H2,L1),comp(H1,T2,L2),union(L1,L2,L3),comp(T1,[H2|T2],L4),union(L3,L4,L).
comp(H,[H1|T2],L):-composition(H,H1,L1),comp(H,T2,L2),union(L1,L2,L).
comp(_,[],[]).
comp([],_,[]).
%%距离的组合运算
%%diatance :a,b 方向列表是L1,距离范围是L2;b,c方向列表是L3,距离范围是L4;组合后的 a,c的距离范围是L;
distance(L1,L2,L3,L4,L):-member(X,L1),member(Y,L3),d2n(X,I),d2n(Y,J),maxs(K,I,J,M),mins(K,I,J,N),distance1(M,N,L2,L4,DMAX,DMIN),L=[DMIN,DMAX].
%%distance1 是求出最大和最小的距离
%%当L2,L4为具体的值的时候:
distance1(M,N,L2,L4,DMAX,DMIN):-fail_if( member(X,L2)),fail_if(member(Y,L4)),cos(M,M1),cos(N,N1),pf(L2,X1),pf(L4,X2),jia(X1,X2,X3), cheng(L4,M1,X4),cheng(L4,N1,Y1),cheng(L2,X4,X5),cheng(2,X5,X6),
jian(X3,X6,X),sqrt(X,DMAX),cheng(L2,Y1,Y2),cheng(2,Y2,Y3),jian(X3,Y3,Y),sqrt(Y,DMIN).
%%当L2,L4为距离的范围的时候,既距离是用最大值和最小值组成的列表的时候:
distance1(M,N,[H1|T1],[H2|T2],DMAX,DMIN):-cos(M,M1),reverse([H1|T1],[H3|T3]),reverse([H2|T2],[H4|T4]),cheng(H3,H3,X1),cheng(H4,H4,X2),jia(X1,X2,X3), cheng(H3,H4,X4),cheng(X4,2,X5),cheng(X5,M1,X6),
jian(X3,X6,X7),sqrt(X7,DMAX),cos(N,N1),cheng(H1,H1,Y1),cheng(H2,H2,Y2),jia(Y1,Y2,Y3), cheng(H1,H2,Y4),cheng(Y4,2,Y5),cheng(Y5,N1,Y6),
%%加减乘除 jian(Y3,Y6,Y7),sqrt(Y7,DMIN).
pf(L2,L):- *(L2,L2,L).
cheng(X,Y,L):- *(X,Y,L).
jian(X,Y,L):- -(X,Y,L).
jia(X,Y,L):- +(X,Y,L).
chu(X,Y,L):- /(X,Y,L).
%%表示运用的方向模型是8方向的
number1(K):-K=8.
%%距离上下界判定公式的实现:
maxs(K,I,J,M):-number1(K),jia(K,2,X1),jian(I,J,X2),abs(X2,X3),cheng(2,X3,X4),jian(X4,K,X5),
abs(X5,X6),X6#>0,jian(X1,X6,X7),chu(X7,K,X8),cheng(3.1415926535897932,X8,M).
maxs(K,I,J,M):-number1(K),jia(K,2,X1),jian(I,J,X2),abs(X2,X3),cheng(2,X3,X4),jian(X4,K,X5),
abs(X5,X6),X6=0,jian(X1,X6,X7),chu(X7,K,X8),M=3.1415926535897932.
mins(K,I,J,N):-number1(K),jian(K,2,X1),jian(I,J,X2),X3#>0,abs(X2,X3),cheng(2,X3,X4),jian(X4,K,X9),abs(X9,X),jian(X1,X,X5),
chu(X5,K,X8),cheng(3.1415926535897932,X8,N).
mins(K,I,J,N):-number1(K),jian(K,2,X1),jian(I,J,X2),abs(X2,X3),cheng(2,X3,X4),jian(X4,K,X9),abs(X9,X),jian(X1,X,X5),X2=0,
chu(X5,K,X8),N=0.
%%下面程序中碰到comp(L1,L2,L)不管L1,L2是列表还是值,都在它的具体实现定义中做了处理。intersection,是求交集。untion是求并集运算。
%%方向的约束推理
ctr(X,Y,L)<=>length(L,N),N>0|ctr(N,X,Y,L,1).
ctr(N,X,Y,L,I)<=>N=9|true.
ctr(N1,X,Y,L1,I),ctr(N2,X,Y,L2,J) <=>intersection(L1,L2,L3),length(L3,N3),min(I,J,K)|ctr(N3,X,Y,L3,K).
ctr(N1,Y,X,L1,I),ctr(N2,X,Y,L,J)<=>invv(L1,M),intersection(M,L,L3),length(L3,N3),min(I,J,K)|ctr(N3,X,Y,L3,K).
ctr(N1,X,Y,L1,I),ctr(N2,Y,Z,L2,J)==>J=1,comp(L1,L2,L3),length(L3,M),K is I+J|ctr(M,X,Z,L3,K).
ctr(N1,Y,X,L1,I),ctr(N2,Y,Z,L2,J) ==>J=1,invv(L1,Lx),comp(Lx,L2,L3),length(L3,M),K is I+J|ctr(M,X,Z,L3,K).
%%拓扑的约束推理
ctp(X,Y,L)<=>length(L,N),N>0|ctp(N,X,Y,L,1).
ctp(N,X,Y,L,I)<=>N=9|true.
ctp(N1,X,Y,L1,I),ctp(N2,X,Y,L2,J) <=>intersection(L1,L2,L3),length(L3,N3),min(I,J,K)|ctp(N3,X,Y,L3,K).
ctp(N1,Y,X,L1,I),ctp(N2,X,Y,L,J)<=>invv(L1,M),intersection(M,L,L3),length(L3,N3),min(I,J,K)|ctp(N3,X,Y,L3,K).
ctp(N1,X,Y,L1,I),ctp(N2,Y,Z,L2,J)==>J=1,comp(L1,L2,L3),length(L3,M),K is I+J|ctp(M,X,Z,L3,K).
ctp(N1,Y,X,L1,I),ctp(N2,Y,Z,L2,J) ==>J=1,invv(L1,Lx),comp(Lx,L2,L3),length(L3,M),K is I+J|ctp(M,X,Z,L3,K).
ctd(X,Y,L)<=>fail_if(member(X,L))|ctd(X,Y,L,1).
ctd(X,Y,L)<=>ctd(X,Y,L,1).
%%方向距离的组合约束推理
ctr(N1,Y,X,L1,I),ctd(X,Y,L2,J)==>max(I,J,K),invv(L1,Lx)|ctrd(N1,X,Y,Lx,L2,K).
ctrd(N1,X,Y,L0,[H|T],I),ctrd(N2,X,Y,L1,L2,J)<=>L0=L1,L2<H|chongtu(X,Y).
ctrd(N1,X,Y,L0,[H|T],I),ctrd(N2,X,Y,L1,L2,J)<=>L0=L1,reverse([H|T],[H1|T1]),L2>H1|chongtu(X,Y).
%%ctd(X,Y,[H1|T1],I),ctd(X,Y,[H2|T2],J)<=>reverse([H1|T1],[H3|T3]),H3<H2|chongtu(X,Y).
%%ctd(X,Y,[H1|T1],I),ctd(X,Y,[H2|T2],J)<=>max(I,J,K),H is K+1,max(H1,H2,H3),reverse([H1|T1],[H4|T4]),reverse([H2|T2],[H5|T5]),min(H4,H5,H6)|ctd(X,Y,[H3,H5],H).
ctr(N1,X,Y,L1,I),ctd(X,Y,L2,J)==>max(I,J,K)|ctrd(N1,X,Y,L1,L2,K).
ctrd(N1,X,Y,L1,L2,K),ctrd(N2,Y,Z,L3,L4,M)==>max(K,M,K1),H is K+1,invv(L1,Lx),distance(Lx,L2,L3,L4,L)|ctd(X,Z,L,H).
%%ctrd(N1,Y,X,L1,L2,K),ctrd(N2,Y,Z,L3,L4,M)==>max(K,M,K1),H is K+1,distance(L1,L2,L3,L4,L)|ctd(X,Z,L,H).
ctr(N1,X,Y,L1,I),ctd(X,Y,L2,K)==>N1>0,max(I,J,H)|ctrd(N1,X,Y,L1,L2,H).
ctr(N1,Y,X,L1,I),ctd(X,Y,L2,K)==>N1>0,max(I,J,H)|ctrd(N1,Y,X,L1,L2,H).
%%方向拓扑的组合推理
ctr(N1,Y,X,L1,I),ctp(N2,X,Y,L2,J)==>invv(L1,Lx),max(I,J,H),K is H+1|ctz(N1,N2,X,Y,Lx,L2,K).
ctr(N1,X,Y,L1,I),ctp(N2,X,Y,L2,J)==>max(I,J,H),K is H+1|ctz(N1,N2,X,Y,L1,L2,K).
ctz(N1,N2,X,Y,L1,L2,I),ctz(N3,N4,X,Y,L3,L4,J)<=>intersection(L1,L3,L5),intersection(L2,L4,L6),length(L5,N5),length(L6,N6),min(I,J,K)|ctz(N5,N6,X,Y,L5,L6,K).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -