Mercurial > hg > Applications > Tokio
view Examples/etc/send @ 0:cfb7c6b24319
Initial revision
author | kono |
---|---|
date | Thu, 30 Aug 2007 14:57:44 +0900 |
parents | |
children |
line wrap: on
line source
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % example of handshake % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % try tokio hand. I don't know how to stop it $define (loop(X) :- H) $clause (H :- X && H). hand :- Hear=0,Call=0, send(Call,Hear,Data), % all always receive(Call,Hear,Data), #(write((Call,Hear,Data))). % sender and receiver send(Call,Hear,Data) :- #send_sync(Call,Hear),send_data(Call,Hear,Data,0). send_sync(Call,Hear) :- Hear=0, Call=0, @Call = 1. send_sync(Call,Hear) :- Hear=0, Call=1. send_sync(Call,Hear) :- Hear=1, Call=1, @Call = 0. send_sync(Call,Hear) :- Hear=1, Call=0. send_data(Call,Hear,Data,I) :- halt(Call=1) & #(Data=I), halt(Call=0) & J <-- I+1, @send_data(Call,Hear,Data, J). receive(Call,Hear,Data) :- #receive_sync(Call,Hear),receive_data(Call,Hear,Data). receive_sync(Call,Hear) :- Call=1, Hear=0, @Hear = 1. receive_sync(Call,Hear) :- Call=1, Hear=1. receive_sync(Call,Hear) :- Call=0, Hear=1, @Hear = 0. receive_sync(Call,Hear) :- Call=0, Hear=0. receive_data(Call,Hear,Data) :- halt(Hear=1) & write(accept(Data)),halt(Hear=0) & @receive_data(Call,Hear,Data). % end of examples