⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 route.pl

📁 PRl教学程序 PRl教学程序 PRl教学程序
💻 PL
📖 第 1 页 / 共 2 页
字号:
horizontal_constraints(Track0,[node(N,_,_,_,_)|Ns],Vector):-
    arg(N,Vector,Net),
    track_field(Net,Track),
    Track0#\=Track,
    horizontal_constraints(Track0,Ns,Vector).


above_constraints(T1,T0,MaxT):-
    freeze(T1,above_constraints_a(T1,T0,MaxT)), % T1 is instantiated  
    freeze(T0,above_constraints_b(T1,T0,MaxT)).

above_constraints_a(T1,T0,MaxT):-
    Upper is (T1//MaxT)*MaxT+MaxT-1,
    T0 notin T1..Upper.

above_constraints_b(T1,T0,MaxT):-
    Low is (T0//MaxT)*MaxT,
    T1 notin Low..T0.

%%%%%%%%%%%%%%%%% Other library routines %%%%%%%%%%%%%%%%%%%%%%%
h_overlap(Net0,Net):-
    head_field(Net,H),
    tail_field(Net,T),
    head_field(Net0,H0),
    tail_field(Net0,T0),
    h_overlap(H0,T0,H,T).

h_overlap(H0,T0,H,T):-
    connected(H0,T0,H,T),!,fail.
h_overlap(H0,T0,H,T):-
    arg(1,H0,I0),
    arg(1,T0,J0),
    arg(1,H,I),
    arg(1,T,J),
    (I>=I0,I=<J0; I0>=I,I0=<J).

% if two nets are connected, then they are actually on net.
connected(t(I),_,H,t(I)):-!.
connected(b(I),_,H,b(I)):-!.
connected(_,t(I),t(I),_):-!.
connected(_,b(I),b(I),_):-!.

above(Var1,Var2):-
    terms_field(Var1,Terms1),
    terms_field(Var2,Terms2),
    above2(Terms1,Terms2).

above2([t(K)|_],[b(K)|_]):-!.
above2(Ts1,Ts2):-
    [T1|Ts3]=Ts1,
    [T2|Ts4]=Ts2,
    arg(1,T1,C1),
    arg(1,T2,C2),
    (C1<C2 -> above2(Ts3,Ts2); above2(Ts1,Ts4)).

extract_domain_vars([],Vars):-Vars=[].
extract_domain_vars([Net|Nets],Vars):-
    track_field(Net,Track),
    Vars=[Track|Vars1],
    extract_domain_vars(Nets,Vars1).
    
net_head([H|_],H1):-H1=H.

net_tail([Tail],Tail1):-!,Tail1=Tail.
net_tail([_|Tail],Tail1):-
    net_tail(Tail,Tail1).

head_field(Var,Head):-
    arg(2,Var,Head).

tail_field(Var,Tail):-
    arg(3,Var,Tail).

terms_field(Var,Terms):-
    arg(4,Var,Terms).

track_field(Var,Track):-
    arg(5,Var,Track).

depth_field(Var,Depth):-
    arg(6,Var,Depth).

remove_net(Net,G):-
    arg(1,Net,N),
    arg(N,G,Node),
    Node=node(_,1,_,_,_).

%%%%%%%%%%%%%%%%%%%%%%% output %%%%%%%%%%%%%%%%%%%%%%% 
output(N,L,T,C,Vector):-
    name(N,S1),
    name(L,S2),
    name(sol,S0),
    append(S0,[0'_|S1],[0'_|S2],S012),
    append(S012,".tex",S),
    name(OutFile,S),
    tell(OutFile),
    functor(Vector1,nets,N),
    decode_layer_track(N,Vector,Vector1,L,T),
    output(L,T,C,Vector1),
%    output_data(1,N,Vector1),
    told.

output_data(N0,N,Vector):-
    N0>N,!.
output_data(N0,N,Vector):-
    arg(N0,Vector,Net),
    write(Net),write('.'),nl,
    N1 is N0+1,
    output_data(N1,N,Vector).


append(L1,L2,L3,L):-
    append(L1,L2,L12),
    append(L12,L3,L).

decode_layer_track(N,Vector,Vector1,MaxLayer,MaxTrack):-
    N=:=0,!.
decode_layer_track(N,Vector,Vector1,MaxLayer,MaxTrack):-
    arg(N,Vector,Var),
    Var=net(N0,Head,Tail,Terminals,TrackValue,Depth),
    NewVar=net(N0,Head,Tail,Terminals,NewLayer,NewTrack),
    NewLayer is TrackValue//MaxTrack+1,
    NewTrack is TrackValue-(TrackValue//MaxTrack)*MaxTrack+1,
    arg(N,Vector1,NewVar),
    N1 is N-1,
    decode_layer_track(N1,Vector,Vector1,MaxLayer,MaxTrack).

output(MaxLayer,MaxTrack,MaxTerm,Dvars):-
	global_get(javaObject,Obj),
	output_rows(Obj,MaxLayer,MaxTrack,MaxTerm),
	functor(Dvars,F,N),
	output_nets(Obj,MaxTrack,Dvars,1,N).

output_rows(Obj,Layer,MaxTrack,MaxTerm):-
	Layer=<0,!.
output_rows(Obj,Layer,MaxTrack,MaxTerm):-
	Top is Layer*(MaxTrack+3),
	Bottom is (Layer-1)*(MaxTrack+3)+2,
	Len is MaxTerm+1,
	X1 is 0, Y1 is 10*Top, X2 is X1+3*Len, Y2 is Y1,
	javaMethod(Obj,addLine(X1,Y1,X2,Y2)),
	X11 is 0, Y11 is 10*Bottom, X12 is X11+3*Len, Y12 is Y11,
	javaMethod(Obj,addLine(X11,Y11,X12,Y12)),
	output_channel(Obj,MaxTerm,Top),
	output_channel(Obj,MaxTerm,Bottom),
	Layer1 is Layer-1,
	output_rows(Obj,Layer1,MaxTrack,MaxTerm).

output_channel(Obj,N,Y):-N=:=0,!.
output_channel(Obj,N,Y):-
	X1 is N*3,
	Y1 is Y*10,
	javaMethod(Obj,addOval(X1,Y1,2,2,1)),
	N1 is N-1,
	output_channel(Obj,N1,Y).
	
output_nets(Obj,MaxTrack,Dvars,N0,N):-
	N0>N,!.
output_nets(Obj,MaxTrack,Dvars,N0,N):-
	arg(N0,Dvars,Dvar),
	Dvar=net(N0,Head,Tail,Terms,Layer,Track),
	Y is (Layer-1)*(MaxTrack+3)+2+Track,
	Y1 is 10*Y,
	arg(1,Head,LeftT),
	arg(1,Tail,RightT),
	Length is RightT-LeftT,
	X1 is 3*LeftT,
	X2 is X1+3*Length,
	Y2 is Y1,
	javaMethod(Obj,addLine(X1,Y1,X2,Y2)),
	Top is Layer*(MaxTrack+3),
	Bottom is (Layer-1)*(MaxTrack+3)+2,
	Top_len is MaxTrack-Track+1,
	output_terminals(Obj,Top_len,Track,Y,Terms),
	N1 is N0+1,
	output_nets(Obj,MaxTrack,Dvars,N1,N).

output_terminals(Obj,Top_len,Bottom_len,Y,[]):-!.
output_terminals(Obj,Top_len,Bottom_len,Y,[t(X)|Terminals]):-
	(X=:=0->true;
	    X1 is 3*X, Y1 is 10*Y,
	    X2 is X1, Y2 is Y1+10*Top_len,
	    %write_line(['\put(',X,',',Y,'){\line(0,1){',Top_len,'}}']),
	    javaMethod(Obj,addLine(X1,Y1,X2,Y2)),
	    %write_line(['\put(',X,',',Y,'){\circle*{0.2}}'])
	    javaMethod(Obj,addOval(X1,Y1,2,2,1))
	),
	output_terminals(Obj,Top_len,Bottom_len,Y,Terminals).
output_terminals(Obj,Top_len,Bottom_len,Y,[b(X)|Terminals]):-
	(X=:=0->true;
	    X1 is 3*X, Y1 is 10*Y,
	    X2 is X1, Y2 is Y1-10*Bottom_len,
	    %write_line(['\put(',X,',',Y,'){\line(0,-1){',Bottom_len,'}}']),
	    javaMethod(Obj,addLine(X1,Y1,X2,Y2)),
	    %write_line(['\put(',X,',',Y,'){\circle*{0.2}}'])
	    javaMethod(Obj,addOval(X1,Y1,2,2,1))
	),
	output_terminals(Obj,Top_len,Bottom_len,Y,Terminals).

write_line([]):-
    nl.
write_line([X|L]):-
    write(X),
    write_line(L).

%%%%%%%%%%%%%% Nets in Deutsch's difficult problem %%%%%%%%%%%%%%%%%%%%%
net(1,N):-N=[t(5),t(28)].
net(2,N):-N=[t(39),t(67)].
net(3,N):-N=[t(74),t(117)].
net(4,N):-N=[b(145),t(151)].
net(5,N):-N=[t(161),t(163)].
net(6,N):-N=[b(62),t(77)].
net(7,N):-N=[t(78),t(82)].
net(8,N):-N=[b(90),t(110),b(118),t(123)].
net(9,N):-N=[t(139),t(141),t(144),b(151),t(174)].
net(10,N):-N=[t(106),t(130),t(132),b(161),t(168)].
net(11,N):-N=[t(70),t(98),t(100)].
net(12,N):-N=[t(109),t(131),t(135),b(141),t(153),t(155),t(171)].
net(13,N):-N=[t(24),b(37),t(53),b(55),t(60),t(92),b(110)].
net(14,N):-N=[b(117),t(166)].
net(15,N):-N=[t(12),t(19)].
net(16,N):-N=[t(22),b(39),t(51),t(58),t(94),b(97),b(106),b(108),b(135),b(144),b(155),b(166)].
net(17,N):-N=[t(6),t(13),b(22),t(30),t(34),t(36),t(40)].
net(18,N):-N=[b(78),t(147),t(149)].
net(19,N):-N=[t(159),b(165)].
net(20,N):-N=[t(0),t(21),b(40),t(48),t(50),t(57),t(95)].
net(21,N):-N=[b(98),t(119)].
net(22,N):-N=[t(120),t(154),t(156)].
net(23,N):-N=[t(2),b(13)].
net(24,N):-N=[t(20),b(57),t(68),t(76),t(111),b(119),t(122)].
net(25,N):-N=[t(128),b(149),b(160),t(167)].
net(26,N):-N=[b(2),b(5),t(11),t(14),t(46),t(49)].
net(27,N):-N=[t(66),b(70)].
net(28,N):-N=[b(95),t(105),b(113),t(124),b(128)].
net(29,N):-N=[t(138),t(140)].
net(30,N):-N=[t(7),b(14)].
net(31,N):-N=[b(7),b(11),t(15),t(16),b(19)].
net(32,N):-N=[t(23),b(24)].
net(33,N):-N=[b(66),b(68),t(83),b(92),t(99),t(101),b(102)].
net(34,N):-N=[t(3),b(16),b(21),b(32),b(58),t(69),t(75),b(77),t(112),b(120),t(121)].
net(35,N):-N=[b(124),t(129)].
net(36,N):-N=[t(134),b(140),b(150),t(162),t(164),t(173)].
net(37,N):-N=[t(73),b(75)].
net(38,N):-N=[t(87),b(94),b(101),t(114),t(116)].
net(39,N):-N=[t(136),b(154)].
net(40,N):-N=[t(44),b(60),t(65),b(73),t(79),t(104),b(112),t(125),b(129)].
net(41,N):-N=[b(79),t(93)].
net(42,N):-N=[b(114),t(133)].
net(43,N):-N=[b(134),t(158)].
net(44,N):-N=[b(65),b(74)].
net(45,N):-N=[t(84),t(86),b(93),t(146),t(148)].
net(46,N):-N=[t(25),b(36),t(54),t(61),t(91),b(99),b(104),b(133),b(142),b(146),b(153),b(164)].
net(47,N):-N=[t(52),b(54)].
net(48,N):-N=[t(1),b(50),b(52)].
net(49,N):-N=[b(1),t(8),t(29),t(41),b(44),b(46),t(63)].
net(50,N):-N=[t(33),t(35)].
net(51,N):-N=[t(38),t(45),b(61),t(71),b(86)].
net(52,N):-N=[t(127),t(143),b(159)].
net(53,N):-N=[t(10),t(27),b(29),t(43)].
net(54,N):-N=[t(47),b(67),b(71),t(81),b(82),b(84),t(89),b(91)].
net(55,N):-N=[b(127),t(172)].
net(56,N):-N=[b(6),b(10),t(18)].
net(57,N):-N=[t(31),b(38)].
net(58,N):-N=[b(41),t(59)].
net(59,N):-N=[b(63),b(69),t(72),b(87)].
net(60,N):-N=[t(88),b(89)].
net(61,N):-N=[t(96),b(105)].
net(62,N):-N=[t(4),b(15),b(20),b(31),b(59),t(64),b(72),t(80),t(103),b(111),t(126),b(130)].
net(63,N):-N=[b(138),b(168),t(170)].
net(64,N):-N=[b(4),t(9),t(42),b(49),b(51),t(56)].
net(65,N):-N=[b(64),t(85),b(88)].
net(66,N):-N=[b(158),t(169)].
net(67,N):-N=[b(3),b(9),b(12),t(17)].
net(68,N):-N=[b(23),b(43),b(45)].
net(69,N):-N=[b(56),b(81),b(83)].
net(70,N):-N=[b(96),b(107),b(109),b(136),b(143),b(156),b(167)].
net(71,N):-N=[b(8),b(17)].
net(72,N):-N=[b(18),b(26),b(28)].

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -