annotate Examples/unifier/up @ 4:f864bb4ba9a4 default tip

update tags
author convert-repo
date Fri, 07 Nov 2008 20:36:52 +0000
parents cfb7c6b24319
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
1 /*
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
2
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
3 ?-com([upm,up]).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
4 ?-tokio test.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
5
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
6 Thu Sep 4 22:22:41 GMT+9:00 1986
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
7 */
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
8
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
9 :- static([
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
10 memory(_), g_addr, d_addr, g_cell, d_cell, g_mem, d_mem,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
11 length, stack_ln(_), stack_ga(_), stack_da(_),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
12 stack_depth, return_code, run, d_bus, g_bus]).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
13
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
14
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
15 init:-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
16 *length <= (*memory(*g_addr)..data - 1,int,0),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
17 *d_addr <= (*d_addr..data + 2,int,*d_addr..map),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
18 *g_addr <= (*g_addr..data + 2,int,*g_addr..map),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
19 *stack_depth <= 0,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
20 *run <= 1
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
21 && loop_unif.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
22
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
23 loop_unif:-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
24 if *length..data > 0
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
25 then fetch_unif1
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
26 else if *stack_depth = 0
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
27 then (*return_code <= (0,int,0), *run <= 0 && idle)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
28 else *length <= *stack_ln(*stack_depth - 1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
29 *g_addr <= *stack_ga(*stack_depth - 1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
30 *d_addr <= *stack_da(*stack_depth - 1),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
31 *stack_depth <= *stack_depth - 1
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
32 && fetch_unif1.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
33
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
34 fetch_unif1:-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
35 fetch_unif0g,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
36 fetch_unif0d &&
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
37 *length <= (*length..data - 1,int,0),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
38 *g_addr <= (*g_addr..data + 1,int, *g_addr..map),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
39 *d_addr <= (*d_addr..data + 1,int, *d_addr..map) &&
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
40 fetch_unif2.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
41
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
42 fetch_unif0g:-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
43 fetch(*g_addr,*g_cell,*g_bus), *g_mem <= *g_addr &&
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
44 if *g_cell..tag = var
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
45 then fetch_unif1g.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
46
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
47 fetch_unif1g:-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
48 fetch(*g_cell,*g_cell,*g_bus), *g_mem <= *g_cell &&
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
49 if *g_cell..tag = var
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
50 then fetch_unif1g.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
51
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
52 fetch_unif0d:-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
53 fetch(*d_addr,*d_cell,*d_bus), *d_mem <= *d_addr &&
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
54 if *d_cell..tag = var
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
55 then fetch_unif1d.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
56
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
57 fetch_unif1d:-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
58 fetch(*d_cell,*d_cell,*d_bus), *d_mem <= *d_cell &&
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
59 if *d_cell..tag = var
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
60 then fetch_unif1d.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
61
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
62 fetch_unif2:-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
63 if *g_mem = *d_mem then loop_unif
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
64 else {
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
65 G = *g_cell..tag, D = *d_cell..tag, {
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
66 if (G=undef,D=undef) then
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
67 (store(*g_mem,*d_mem, *g_bus) && loop_unif)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
68 else if (G=undef,D\=undef) then
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
69 (store(*g_mem,*d_cell,*g_bus) && loop_unif)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
70 else if (G\=undef,D=undef) then
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
71 (store(*d_mem,*g_cell,*d_bus) && loop_unif)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
72 else if (G=list,D=list) then
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
73 (if *length..data > 0
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
74 then ((*stack_depth <= *stack_depth + 1,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
75 S<-- *stack_depth,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
76 *stack_ga(S) <= *g_addr,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
77 *stack_da(S) <= *d_addr,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
78 *stack_ln(S) <= *length,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
79 *length <= (2,int,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
80 *g_addr <= *g_cell,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
81 *d_addr <= *d_cell) && fetch_unif1)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
82 else loop_unif)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
83 else if (*g_cell..tag \= *d_cell..tag ;
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
84 *g_cell..data \= *d_cell..data) then
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
85 ((*return_code <= fail, *run <= 0) && idle)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
86 else loop_unif }}.
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
87
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
88
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
89 idle:- if *run = 1
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
90 then (true && init).
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
91
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
92
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
93 test:-
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
94 *memory((0,_,g)) := (4,int,g), % length
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
95 *memory((1,_,g)) := (append,atom,g), % append
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
96 *memory((2,_,g)) := (100,list,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
97 *memory((3,_,g)) := (200,list,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
98 *memory((4,_,g)) := (300,var,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
99 *memory((5,_,g)) := (2,int,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
100 *memory((6,_,g)) := (print,atom,g), % print
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
101 *memory((7,_,g)) := (400,var,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
102 *memory((8,_,g)) := (0,int,g), % length = 0
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
103 *memory((100,_,g)) := (a,atom,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
104 *memory((101,_,g)) := (102,list,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
105 *memory((102,_,g)) := (b,atom,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
106 *memory((103,_,g)) := ([],atom,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
107 *memory((200,_,g)) := (c,atom,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
108 *memory((201,_,g)) := (102,list,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
109 *memory((202,_,g)) := (d,atom,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
110 *memory((203,_,g)) := ([],atom,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
111 *memory((300,_,g)) := (0,undef,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
112 *memory((400,_,g)) := (0,undef,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
113 *memory((0,_,d)) := (5,int,d),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
114 *memory((1,_,d)) := (append,atom,d), % append([H|X],Y,[H|Z])
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
115 *memory((2,_,d)) := (200,list,d),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
116 *memory((3,_,d)) := (300,var,d),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
117 *memory((4,_,d)) := (400,list,d),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
118 *memory((5,_,d)) := (5,int,d),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
119 *memory((6,_,d)) := (append,atom,d), % append([],X,X)
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
120 *memory((7,_,d)) := ([],atom,d),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
121 *memory((8,_,d)) := (100,var,d),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
122 *memory((9,_,d)) := (100,var,d),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
123 *memory((100,_,d)) := (0,undef,d),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
124 *memory((200,_,d)) := (500,var,d), % [H|X]
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
125 *memory((201,_,d)) := (600,var,d),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
126 *memory((300,_,d)) := (0,undef,d), % Y
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
127 *memory((400,_,d)) := (700,list,d), % [H|Z]
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
128 *memory((500,_,d)) := (0,undef,d), % H
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
129 *memory((600,_,d)) := (0,undef,d), % X
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
130 *memory((700,_,d)) := (500,var,d), % H
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
131 *memory((701,_,d)) := (800,var,d), % Z
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
132 *memory((800,_,d)) := (0,undef,d), % Z
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
133 *g_addr := (0,int,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
134 *d_addr := (0,int,d),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
135 *return_code := (0,undef,0),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
136 *length := (0,int,0),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
137 *g_mem := (0,int,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
138 *d_mem := (0,int,d),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
139 *g_cell := (0,int,g),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
140 *d_cell := (0,int,d),
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
141 *run := 0,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
142 *d_bus := free, *g_bus := free,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
143 *stack_depth := 0 &&
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
144 init,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
145 # (Write = (*g_addr, *d_addr, *return_code, *run, *length,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
146 *g_mem, *d_mem, *g_cell, *d_cell, *stack_depth,
cfb7c6b24319 Initial revision
kono
parents:
diff changeset
147 *g_bus, *d_bus), write(Write) ).