Re: help with message-passing syntax
I'm sorry, you code has so many errors.
I think you'd better look at the book <programming erlang >, and the erlang referance manual.
the fllow code snips is my code, but I don't know If it's your need. I hope it's useful for you:
%%%%%%%%%%%%%%%%%%%%%%
-module(serec).
-export([start/0, get_squarer/2]).
seq(Start, End) -> seq(Start, End, []).
seq(Start, End, Acc) when Start =< End ->
seq(Start, End-1, [End|Acc]);
seq(_, _, Acc) ->
Acc.
squarer() ->
receive
{From, N} when N > 7 ->
From ! {self(), [X*X || X <- seq(1, 7)]},
squarer();
{From, N} ->
From ! {self(), [X*X || X <- seq(1, N)]},
squarer();
Other ->
Other
end.
%% <at> spec squarer() -> Pid
%% <at> doc create the squarer process
start() ->
spawn(fun squarer/0).
%% <at> spec get_squarer(Pid, N) -> Result
%% <at> doc get the result form squarer process
get_squarer(Pid, N) when is_pid(Pid) ->
Pid ! {self(), N},
receive
{Pid, Result} ->
Result;
Other ->
Other
end.
%%%%%%%%%%%%%%%%%%%
usage:
4> c(serec).
{ok,serec}
5> Pid = serec:start().
<0.49.0>
6> serec:get_squarer(Pid, 3).
[1,4,9]
7> serec:get_squarer(Pid, 4).
[1,4,9,16]
8> serec:get_squarer(Pid, 5).
[1,4,9,16,25]
9> serec:get_squarer(Pid, 10).
[1,4,9,16,25,36,49]
2008/7/3 not norwegian swede <
notnorwegian <at> yahoo.se>:
im using: http://www.erlang.org/doc/reference_manual/part_frame.html but cant really figure it out. i didnt expect this to work but compiled anyway:
2> c("c:/Program Files/erl5.6.2/usr/serec", [{outdir, "c:/Program Files/erl5.6.2/usr/"}]). c:/Program Files/erl5.6.2/usr/serec.erl:2: function squarer/1 undefined c:/Program Files/erl5.6.2/usr/serec.erl:2: function squarer2/1 undefined
c:/Program Files/erl5.6.2/usr/serec.erl:23: premature end error 3>
obv this is just a toy program but say I have a function that squares the integers of a list from 1 to the send parameter. so i want to send a message to that function.
-module(serec). -export([seq/2,squarer/1,squarer2/1]). seq(Start, End) -> seq(Start, End, []).
seq(Start, End, Acc) when Start
=< End -> seq(Start, End-1, [End|Acc]); seq(_, _, Acc) -> Acc.
squarer(X) -> receive Pattern [when Pattern > 7] -> [X*X || X <- [seq(1, 7]]; end
squarer2(X) -> receive when X > 7 -> [X*X || X <- [seq(1, 7]]; end
squarer(X) ! 2+6
|
Låna pengar utan säkerhet.
Sök och jämför lån hos Kelkoo.
_______________________________________________
erlang-questions mailing list
erlang-questions <at> erlang.org
http://www.erlang.org/mailman/listinfo/erlang-questions
<div>
<p>I'm sorry, you code has so many errors.<br>I think you'd better look at the book <programming erlang >, and the erlang referance manual.<br><br>the fllow code snips is my code, but I don't know If it's your need. I hope it's useful for you:<br>
%%%%%%%%%%%%%%%%%%%%%%<br>-module(serec).<br>-export([start/0, get_squarer/2]).<br> <br>seq(Start, End) -> seq(Start, End, []).<br><br>seq(Start, End, Acc) when Start =< End -><br> seq(Start, End-1, [End|Acc]);<br>
seq(_, _, Acc) -><br> Acc.<br><br>squarer() -><br> receive<br> {From, N} when N > 7 -><br> From ! {self(), [X*X || X <- seq(1, 7)]},<br> squarer();<br> {From, N} -><br> From ! {self(), [X*X || X <- seq(1, N)]},<br>
squarer();<br> Other -><br> Other<br> end.<br><br>%% <at> spec squarer() -> Pid<br>%% <at> doc create the squarer process<br>start() -><br> spawn(fun squarer/0).<br><br>%% <at> spec get_squarer(Pid, N) -> Result<br>
%% <at> doc get the result form squarer process<br>get_squarer(Pid, N) when is_pid(Pid) -><br> Pid ! {self(), N},<br> receive<br> {Pid, Result} -><br> Result;<br> Other -><br> Other<br>
end.<br>%%%%%%%%%%%%%%%%%%%<br><br>usage:<br>4> c(serec).<br>{ok,serec}<br>5> Pid = serec:start().<br><0.49.0><br>6> serec:get_squarer(Pid, 3).<br>[1,4,9]<br>7> serec:get_squarer(Pid, 4).<br>[1,4,9,16]<br>
8> serec:get_squarer(Pid, 5).<br>[1,4,9,16,25]<br>9> serec:get_squarer(Pid, 10).<br>[1,4,9,16,25,36,49]<br><br><br></p>
<div class="gmail_quote">2008/7/3 not norwegian swede <<a href="mailto:notnorwegian <at> yahoo.se">notnorwegian <at> yahoo.se</a>>:<br><blockquote class="gmail_quote">
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="top">
im using:<br><a href="http://www.erlang.org/doc/reference_manual/part_frame.html" target="_blank">http://www.erlang.org/doc/reference_manual/part_frame.html</a><br>but cant really figure it out. i didnt expect this to work but compiled anyway:<br>
2> c("c:/Program Files/erl5.6.2/usr/serec", [{outdir, "c:/Program Files/erl5.6.2/usr/"}]).<br>c:/Program Files/erl5.6.2/usr/serec.erl:2: function squarer/1 undefined<br>c:/Program Files/erl5.6.2/usr/serec.erl:2: function squarer2/1 undefined<br>
c:/Program Files/erl5.6.2/usr/serec.erl:23: premature end<br>error<br>3> <br><br><br>obv this is just a toy program but say I have a function that squares the integers of a list from 1 to the send parameter.<br>so i want to send a message to that function.<br><br><br>-module(serec).<br>-export([seq/2,squarer/1,squarer2/1]).<br> <br>seq(Start, End) -> seq(Start, End, []).<br><br>seq(Start, End, Acc) when Start
=< End -><br> seq(Start, End-1, [End|Acc]);<br>seq(_, _, Acc) -><br> Acc.<br><br>squarer(X) -><br> receive<br> Pattern [when Pattern > 7] -><br> [X*X || X <- [seq(1, 7]];<br> end<br><br>squarer2(X) -><br> receive<br> when X > 7 -> [X*X || X <- [seq(1, 7]];<br> end<br><br>squarer(X) ! 2+6<br><br>
</td></tr></table>
<br>
Låna pengar utan säkerhet.<br><a href="http://www.kelkoo.se/c-100390123-lan-utan-sakerhet.html?partnerId=96915014" target="_blank">Sök och jämför lån hos Kelkoo.</a><br>_______________________________________________<br>
erlang-questions mailing list<br><a href="mailto:erlang-questions <at> erlang.org">erlang-questions <at> erlang.org</a><br><a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote>
</div>
<br>
</div>