home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / oasis / ossxmpls.lha / examples / Tsp.p < prev    next >
Encoding:
Text File  |  1992-04-04  |  2.3 KB  |  111 lines

  1. map:4:3
  2. {`3:i,`1:i;`2:y;}
  3. {
  4. &1:1:1:1
  5.  (`1:i)
  6.     => ([]);;
  7.  (_) |-
  8.     &2:2:0(((#1:i+:i1)):i, #1:i)[;] ();
  9.     &1:1:1(((#1:i+:i1)):i)[;] (?#-2:l)
  10.     => [#-2:l;] (1:i[#1:i|#-2:l]).
  11. &2:2:0:1
  12.  (_, `1:i)
  13.     => ();;
  14.  (_, _) |-
  15.     ((((`3:i*:i4757)+:i1)%:i32768)):i = ?`3:i;
  16.     ((((`3:i/:i16)%:i256)+:i1)):i = ?#-2:i;
  17.     #-2:i = ?`2[(#1:i):i,(#2:i):i]:i;
  18.     #-2:i = ?`2[(#2:i):i,(#1:i):i]:i    
  19.     => &2(((#2:i+:i1)):i, #1:i).
  20. }
  21. Tsp:8:5
  22. {`7:i;`6:l,`5:y,`4:l;}
  23. {
  24. &1:5:0:2 [;]
  25.  (_, _, _, _, _) :-
  26.     (#4:i):i >= (`7:i):i
  27.     => ();
  28.  ([], [], [?#-2:i|_]?#-3:l, _, _) |-
  29.     &3:2:0(((#4:i+:i`5[(#-2:i):i,(0):i]:i)):i, #-3:l)[;] ()
  30.     => ();
  31.  (_, _, _, _, 0) |-
  32.     &4:2:1(1:o[task:5{#1:l,#2:l,#3:l,#4:i}], `4:l)[#3:l,#2:l,#1:l;] (?`4:l)
  33.     => ();;
  34.  (_, _, _, _, _) |-
  35.     &2:5:0(#5:i, #4:i, #3:l, #2:l, #1:l)[#3:l,#2:l,#1:l;] ()    
  36.     => &2(#5:i, #4:i, #3:l, #1:l, #2:l).
  37. &2:5:0:5 [;]
  38.  ([], _, _, _, _)
  39.     => ();;
  40.  ([?#-6:i|?#-5:l], _, [?#-3:i|?#-2:l]?#-4:l, _, _) |-
  41.     &1:5:0(((#5:i-:i1)):i, ((#4:i+:i`5[(#-6:i):i,(#-3:i):i]:i)):i, 2:i[#-6:i,#-3:i|#-2:l], #2:l, #-5:l)[#-4:l,#2:l,#-5:l;] ()    
  42.     => &2(#5:i, #4:i, #-4:l, 1:i[#-6:i|#2:l], #-5:l).
  43. &3:2:0:0
  44.  (_, _) :-
  45.     (#2:i):i >= (`7:i):i
  46.     => ()*;;
  47.  (?`6:l, ?`7:i)
  48.     => ()*.
  49. &4:2:1:3
  50.  ([], _)
  51.     => (#2:l);;
  52.  ([?#-4:o|?#-3:l], _) |-
  53.     &4:2:1(#2:l, #-3:l)[#-4:o;] (?#-2:l)
  54.     => [#-2:l,#-4:o;] (1:o[#-4:o|#-2:l]).
  55. }
  56. Tsp :: Slave:9:7
  57. {`7:i;`8:a,`6:l,`5:y,`4:l;}
  58. {
  59. ?- 0     &5:0:0()[;] ().
  60. &6:0:0:0;
  61.  () :-
  62.     &3[:i, :l](`7:i, `6:l)[] ! `8:a,
  63.     &5:0:0()[;] () :0()
  64.     => ().
  65. &5:0:0:7
  66.  () :-
  67.     &7[]()[:i, :l, :o] ! `8:a :3(?#-8:o, ?#-7:l, ?#-6:i);
  68.     #-8:o = task:5{?#-5:l,?#-4:l,?#-3:l,?#-2:i};
  69.     &3:2:0(#-6:i, #-7:l) ::Tsp[#-3:l,#-4:l,#-5:l;] ();
  70.     &1:5:0((-1):i, #-2:i, #-3:l, #-4:l, #-5:l) ::Tsp[;] ();
  71.     &6:0:0()[;] ()
  72.     => ();;
  73.  ()
  74.     => ().
  75. }
  76. Tsp :: Master:8:8
  77. {`7:i;`6:l,`5:y,`4:l;}
  78. {
  79. &5:3:2:4 [;];
  80.  ($[?#-5:i,#-5:i]?`5:y, _, _) :-
  81.     [] = ?`6:l;
  82.     65535 = ?`7:i;
  83.     map:4{#-5:i,`5:y,197} = ?#-4:o;
  84.     &1:1:1(0) ! #-4:o[#-4:o;] ([?#-3:i|?#-2:l]);
  85.     &1:5:0(#2:i, 0, 1:i[#-3:i], [], #-2:l) ::Tsp[;] ();
  86.     &6:1:0(#3:i)[;] ();
  87.     $wait(#3:i)!~2[;] 
  88.     => (`7:i, `6:l)*.
  89. &6:1:0:0 [;]
  90.  (0)
  91.     => ();;
  92.  (_) |-
  93.     Slave:9{[],`5:y,[],65535,#0:a}@0:0 = _    
  94.     => &6(((#1:i-:i1)):i).
  95. &7:0:3:1
  96.  () :-
  97.     [] == `4:l;
  98.     $post(1)!~2
  99.     => (`7:i, `6:l, $nil)*;
  100.  () :-
  101.     `4:l = [?#-2:o|?`4:l];
  102.     (`7:i):i > (#-2.`4:i):i
  103.     => (`7:i, `6:l, #-2:o)*;;
  104.  () |-
  105.     &7:0:3()[;] (?#-2:o, _, _)
  106.     => (`7:i, `6:l, #-2:o)*.
  107. }
  108. task:5:1
  109. {`4:i;`3:l,`2:l,`1:l;}
  110. {}
  111.