Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type buyer =
- { id: string;
- accept: unit Join.chan;
- refuse: int Join.chan;
- win: unit Join.chan }
- def seller(Some buyer, _) & bid_timeout() = buyer.win()
- or seller(win, curr_bid) & bid(buyer, amount) =
- print_endline (buyer.id ^ " bet " ^ (string_of_int amount));
- if curr_bid < amount then
- match win with
- Some a -> seller(Some buyer, amount) & buyer.accept() & a.refuse(amount)
- | _ -> seller(Some buyer, amount) & buyer.accept()
- else seller(win, curr_bid) & buyer.refuse(curr_bid)
- let mk_buyer id init_amount =
- def buyer(money) & refuse(curr_bid) =
- print_endline (id ^ " was refused; money: " ^ (string_of_int money) ^ "; current bid: " ^ (string_of_int curr_bid));
- if money > 0 && money > curr_bid then begin
- print_endline (id ^ " will bid " ^ (string_of_int (curr_bid + 1)));
- bid(self(), curr_bid + 1) & buyer(money - curr_bid - 1)
- end
- or buyer(money) & accept() =
- print_endline (id ^ " was accepted");
- buyer(money)
- or buyer(_) & win() =
- print_endline (id ^ " won!"); 0
- and self() = reply { id = id;
- accept = accept;
- refuse = refuse;
- win = win } to self in
- spawn buyer(init_amount) & bid(self(), 1)
- def timer(t) =
- Unix.sleep t;
- spawn bid_timeout(); 0
- let start () =
- spawn timer(10) & seller(None, 0);
- mk_buyer "a" 10;
- mk_buyer "b" 2;
- mk_buyer "c" 3
Add Comment
Please, Sign In to add comment