Mercurial > hg > Applications > Tokio
comparison Examples/etc/talk @ 0:cfb7c6b24319
Initial revision
author | kono |
---|---|
date | Thu, 30 Aug 2007 14:57:44 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:cfb7c6b24319 |
---|---|
1 % | |
2 % Talk Program for Tokio | |
3 % Tue Jul 5 01:18:04 JST 1988 | |
4 | |
5 talk(A,B) :- | |
6 #key(A,In1),#crt(A,Out1), | |
7 #key(B,In2),#crt(A,Out2), | |
8 Buffer1 = [], Buffer2 = [], | |
9 merge_dequeue(In1,In2,Out1,Buffer1), | |
10 merge_dequeue(In2,In1,Out2,Buffer2). | |
11 | |
12 key(Who,Input) :- write(Who),write(':in:'), read(Input). | |
13 crt(Who,Output) :- write(Who),write(':out:'),write(Output),nl. | |
14 | |
15 merge_dequeue(In1,In2,Out,Buffer) :- | |
16 merge(In1,In2,Buffer), | |
17 @ dequeue(Out,Buffer), | |
18 @ @ merge_dequeue(In1,In2,Out,Buffer). | |
19 | |
20 merge(In1,In2,Buffer) :- In1 = none, In2 = none,!, | |
21 @Buffer = Buffer. | |
22 merge(In1,In2,Buffer) :- In1 = none, !, | |
23 ap(Buffer,[In2],@Buffer). | |
24 merge(In1,In2,Buffer) :- In2 = none, !, | |
25 ap(Buffer,[In1],@Buffer). | |
26 merge(In1,In2,Buffer) :- % non deterministic choice | |
27 ap(Buffer,[In2],@Buffer). | |
28 merge(In1,In2,Buffer) :- | |
29 ap(Buffer,[In1],@Buffer). | |
30 | |
31 dequeue(Out, Buffer) :- Buffer = [],!. | |
32 dequeue(Out, Buffer) :- Buffer = [Out|@Buffer]. | |
33 | |
34 ap(Nil,X,X1) :- Nil = [], X = X1. | |
35 ap(HX,Z,HY) :- HX = [H|X], HY = [H|Y], | |
36 ap(X,Y,Z). |