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).