File: mesh.kl1

package info (click to toggle)
klic 3.003-1.1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 7,068 kB
  • ctags: 6,333
  • sloc: ansic: 101,584; makefile: 3,395; sh: 1,321; perl: 312; exp: 131; tcl: 111; asm: 102; lisp: 4; sed: 1
file content (40 lines) | stat: -rw-r--r-- 822 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
:- module main.


main:- go(100,100, Sync, Go, Fin), init(Sync,Go,Fin).

init(Sync,Go,Fin) :- wait(Sync) | Go=Sync, init(Fin).
init(Fin) :- wait(Fin) | true.  


go(X,Y,Sync,Go,Fin) :-
    true |
        current_node(C,T),
	row(0,X,0,T,Y,Sync,[],Fin,[],Go).

row(X0,X1,C0,C1,Y)-Sync-F+Go :-
    X0+1 =:= X1 |
        current_node(C,T),
	col(0,Y,0,C)-Sync-F+Go.
otherwise.
row(X0,X1,C0,C1,Y)-Sync-F+Go :-
  true |
  X2 := (X0+X1)/2,
  C2 := (C0+C1)/2,
  (row(X0,X2,C0,C2,Y)-Sync-F+Go)@node(C0),
  (row(X2,X1,C2,C1,Y)-Sync-F+Go)@node(C2).


col(Y0,Y1,C0,C1)-Sync-F+Go :-
  Y0 +1 =:= Y1 |
  w(Go)-Sync-F.
otherwise.
col(Y0,Y1,C0,C1)-Sync-F+Go :-
  Y2 := (Y0+Y1)/2,
  C2 := (C0+C1)/2,
  col(Y0,Y2,C0,C2)-Sync-F+Go@node(C0),
  col(Y2,Y1,C2,C1)-Sync-F+Go@node(C2).

w(Go)-Sync-F:- true | w1(Go)-F.

w1(Go)-F :- wait(Go) | true.