From 5a9cdd3cc89507d4d74f8bded56ce5e037b3b56e Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Fri, 23 Feb 2024 07:08:18 +0100 Subject: wip --- learn-you-some-erlang/kitchen.erl | 64 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 learn-you-some-erlang/kitchen.erl (limited to 'learn-you-some-erlang/kitchen.erl') diff --git a/learn-you-some-erlang/kitchen.erl b/learn-you-some-erlang/kitchen.erl new file mode 100644 index 0000000..bbe0271 --- /dev/null +++ b/learn-you-some-erlang/kitchen.erl @@ -0,0 +1,64 @@ +-module(kitchen). +-compile(export_all). + +start(FoodList) -> + spawn(?MODULE, fridge2, [FoodList]). + +store(Pid, Food) -> + Pid ! {self(), {store, Food}}, + receive + {Pid, Msg} -> Msg + end. + +take(Pid, Food) -> + Pid ! {self(), {take, Food}}, + receive + {Pid, Msg} -> Msg + end. + +store2(Pid, Food) -> + Pid ! {self(), {store, Food}}, + receive + {Pid, Msg} -> Msg + after 3000 -> + timeout + end. + +take2(Pid, Food) -> + Pid ! {self(), {take, Food}}, + receive + {Pid, Msg} -> Msg + after 3000 -> + timeout + end. + +fridge1() -> + receive + {From, {store, _Food}} -> + From ! {self(), ok}, + fridge1(); + {From, {take, _Food}} -> + %% uh.... + From ! {self(), not_found}, + fridge1(); + terminate -> + ok + end. + +fridge2(FoodList) -> + receive + {From, {store, Food}} -> + From ! {self(), ok}, + fridge2([Food|FoodList]); + {From, {take, Food}} -> + case lists:member(Food, FoodList) of + true -> + From ! {self(), {ok, Food}}, + fridge2(lists:delete(Food, FoodList)); + false -> + From ! {self(), not_found}, + fridge2(FoodList) + end; + terminate -> + ok + end. -- cgit v1.2.3