<div dir="ltr">That's a guard sequence, not a block:<div><br></div><div><a href="http://erlang.org/doc/reference_manual/expressions.html#id81869">http://erlang.org/doc/reference_manual/expressions.html#id81869</a></div><div><br></div><div>i.e. if (Inc > 0, First - Inc =< Last) OR (Inc < 0, First - Inc >= Last).<br><div class="gmail_extra"><br><div class="gmail_quote">On 4 November 2014 10:32, Taotao.Li <span dir="ltr"><<a href="mailto:taotao.li@datayes.com" target="_blank">taotao.li@datayes.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><br>
----Source Code--------<br>
<br>
-spec seq(From, To, Incr) -> Seq when<br>
      From :: integer(),<br>
      To :: integer(),<br>
      Incr :: integer(),<br>
      Seq :: [integer()].<br>
<br>
seq(First, Last, Inc)<br>
    when is_integer(First), is_integer(Last), is_integer(Inc) -><br>
    if<br>
        Inc > 0, First - Inc =< Last;<br>
        Inc < 0, First - Inc >= Last -><br>
            N = (Last - First + Inc) div Inc,<br>
            seq_loop(N, Inc*(N-1)+First, Inc, []);<br>
        Inc =:= 0, First =:= Last -><br>
            seq_loop(1, First, Inc, [])<br>
    end.<br>
<br>
seq_loop(N, X, D, L) when N >= 4 -><br>
     Y = X-D, Z = Y-D, W = Z-D,<br>
     seq_loop(N-4, W-D, D, [W,Z,Y,X|L]);<br>
seq_loop(N, X, D, L) when N >= 2 -><br>
     Y = X-D,<br>
     seq_loop(N-2, Y-D, D, [Y,X|L]);<br>
seq_loop(1, X, _, L) -><br>
     [X|L];<br>
seq_loop(0, _, _, L) -><br>
     L.<br>
<br>
-----------------------<br>
<br>
-----Problem-----------<br>
when I entered lists:seq(-10, 10, 2).<br>
what happened?<br>
I think it should execute 'Inc > 0, First-Inc =< Last;' and in this way it should just returning nothing.<br>
<br>
Feeling so confused, can anyone help me about this? thanks a lot!<br>
<br>
<br>
-----------------------<br>
<br>
<br>
----- 原始邮件 -----<br>
发件人: <a href="mailto:erlang-questions-request@erlang.org">erlang-questions-request@erlang.org</a><br>
收件人: <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
发送时间: 星期一, 2014年 11 月 03日 下午 7:00:00<br>
主题: erlang-questions Digest, Vol 190, Issue 1<br>
<br>
Send erlang-questions mailing list submissions to<br>
        <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<br>
To subscribe or unsubscribe via the World Wide Web, visit<br>
        <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
or, via email, send a message with subject or body 'help' to<br>
        <a href="mailto:erlang-questions-request@erlang.org">erlang-questions-request@erlang.org</a><br>
<br>
You can reach the person managing the list at<br>
        <a href="mailto:erlang-questions-owner@erlang.org">erlang-questions-owner@erlang.org</a><br>
<br>
When replying, please edit your Subject line so it is more specific<br>
than "Re: Contents of erlang-questions digest..."<br>
<br>
<br>
Today's Topics:<br>
<br>
   1. Re:  DTLS/SRTP for WebRTC (Ingela Andin)<br>
   2. Re:  spawn and controlling_process (Hynek Vychodil)<br>
   3. Re:  spawn and controlling_process (Jachym Holecek)<br>
   4. Re:  spawn and controlling_process (Gadi Srebnik)<br>
<br>
<br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Sun, 2 Nov 2014 20:03:28 +0100<br>
From: Ingela Andin <<a href="mailto:ingela.andin@gmail.com">ingela.andin@gmail.com</a>><br>
To: pablo platt <<a href="mailto:pablo.platt@gmail.com">pablo.platt@gmail.com</a>><br>
Cc: erlang questions <<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a>><br>
Subject: Re: [erlang-questions] DTLS/SRTP for WebRTC<br>
Message-ID:<br>
        <CAFj9NSTjtsh9u+LmKm-Pv4YM5OJ8Fz=_-<a href="mailto:Cx_v0LxL5EJLDDHFA@mail.gmail.com">Cx_v0LxL5EJLDDHFA@mail.gmail.com</a>><br>
Content-Type: text/plain; charset="utf-8"<br>
<br>
Hi!<br>
<br>
2014-10-30 22:33 GMT+01:00 pablo platt <<a href="mailto:pablo.platt@gmail.com">pablo.platt@gmail.com</a>>:<br>
<br>
> Hi,<br>
><br>
> What is the state of DTLS in OTP?<br>
><br>
<br>
Alas Ericsson has prioritised quite a few other things higher than DTLS<br>
just lately so the implementation has been delayed.<br>
I hope it will get back on track soon but I am afraid you can no count on<br>
it in a short term perspective.<br>
<br>
Regards Ingela Erlang/OTP team - Ericsson AB<br>
<br>
<br>
<br>
><br>
> I'm interested in using DTLS/SRTP in Erlang for WebRTC.<br>
><br>
> I've found two implementations:<br>
><br>
> Clean code but I couldn't make it work because it's missing SRTP support.<br>
> <a href="https://github.com/RoadRunnr/otp/tree/new_crypto_dtls" target="_blank">https://github.com/RoadRunnr/otp/tree/new_crypto_dtls</a><br>
><br>
> This works quite well. I'm able to connect clients to the server:<br>
> <a href="https://groups.google.com/d/msg/discuss-webrtc/MP-1sCrOljA/qAs4VK-18y4J" target="_blank">https://groups.google.com/d/msg/discuss-webrtc/MP-1sCrOljA/qAs4VK-18y4J</a><br>
><br>
> The problem is that some clients can't connect and I'm getting HANDSHAKE<br>
> packets while in the CIPHER state in the following order:<br>
> HANDSHAKE, SERVER_HELLO<br>
> HANDSHAKE, CERTIFICATE<br>
> HANDSHAKE, SERVER_KEY_EXCHANGE<br>
> HANDSHAKE, CERTIFICATE_REQUEST<br>
> HANDSHAKE, SERVER_HELLO_DONE<br>
><br>
> I'm assuming that is related to wrong state change or retransmission.<br>
> The code only implement retransmission for two packet types and have the<br>
> following comment:<br>
> %% problem remainning: different strategy should be adopted while<br>
> state==hello or cipher.<br>
><br>
> Does anyone use DTLS/SRTP in Erlang and help solve this issue or recommend<br>
> another solution?<br>
><br>
> Thanks<br>
><br>
><br>
> _______________________________________________<br>
> erlang-questions mailing list<br>
> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
><br>
><br>
-------------- next part --------------<br>
An HTML attachment was scrubbed...<br>
URL: <<a href="http://erlang.org/pipermail/erlang-questions/attachments/20141102/0530050f/attachment-0001.html" target="_blank">http://erlang.org/pipermail/erlang-questions/attachments/20141102/0530050f/attachment-0001.html</a>><br>
<br>
------------------------------<br>
<br>
Message: 2<br>
Date: Mon, 3 Nov 2014 10:06:28 +0100<br>
From: Hynek Vychodil <<a href="mailto:vychodil.hynek@gmail.com">vychodil.hynek@gmail.com</a>><br>
To: Gadi Srebnik <<a href="mailto:gadi@rounds.com">gadi@rounds.com</a>><br>
Cc: erlang-questions <<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a>><br>
Subject: Re: [erlang-questions] spawn and controlling_process<br>
Message-ID:<br>
        <<a href="mailto:CAL_wnpfgA93QErFDh6UFQPVH%2BB837CiqEr7tBE0r3tuzvi9YFA@mail.gmail.com">CAL_wnpfgA93QErFDh6UFQPVH+B837CiqEr7tBE0r3tuzvi9YFA@mail.gmail.com</a>><br>
Content-Type: text/plain; charset="utf-8"<br>
<br>
No, there is not any difference. Both versions of code is compiled exactly<br>
same:<br>
<br>
fun1(Socket,Mod, Fun, Args) -><br>
    Pid = erlang:spawn(Mod, Fun, Args),<br>
    gen_tcp:controlling_process(Socket,Pid).<br>
<br>
fun2(Socket,Mod, Fun, Args) -><br>
    gen_tcp:controlling_process(Socket,erlang:spawn(Mod, Fun, Args)).<br>
<br>
Then you can compile it with 'S' and get "assembler":<br>
<br>
{function, fun1, 4, 2}.<br>
  {label,1}.<br>
    {line,[{location,"test2.erl",5}]}.<br>
    {func_info,{atom,test2},{atom,fun1},4}.<br>
  {label,2}.<br>
    {allocate,1,4}.<br>
    {move,{x,0},{y,0}}.<br>
    {move,{x,1},{x,0}}.<br>
    {move,{x,2},{x,1}}.<br>
    {move,{x,3},{x,2}}.<br>
    {line,[{location,"test2.erl",6}]}.<br>
    {call_ext,3,{extfunc,erlang,spawn,3}}.<br>
    {move,{x,0},{x,1}}.<br>
    {move,{y,0},{x,0}}.<br>
    {line,[{location,"test2.erl",7}]}.<br>
    {call_ext_last,2,{extfunc,gen_tcp,controlling_process,2},1}.<br>
<br>
<br>
{function, fun2, 4, 4}.<br>
  {label,3}.<br>
    {line,[{location,"test2.erl",9}]}.<br>
    {func_info,{atom,test2},{atom,fun2},4}.<br>
  {label,4}.<br>
    {allocate,1,4}.<br>
    {move,{x,0},{y,0}}.<br>
    {move,{x,1},{x,0}}.<br>
    {move,{x,2},{x,1}}.<br>
    {move,{x,3},{x,2}}.<br>
    {line,[{location,"test2.erl",10}]}.<br>
    {call_ext,3,{extfunc,erlang,spawn,3}}.<br>
    {move,{x,0},{x,1}}.<br>
    {move,{y,0},{x,0}}.<br>
    {line,[{location,"test2.erl",10}]}.<br>
    {call_ext_last,2,{extfunc,gen_tcp,controlling_process,2},1}.<br>
<br>
As you can see, both functions are exactly same. Why should be there any<br>
difference.<br>
<br>
Hynek Vychodil<br>
<br>
On Sat, Nov 1, 2014 at 11:34 AM, Gadi Srebnik <<a href="mailto:gadi@rounds.com">gadi@rounds.com</a>> wrote:<br>
<br>
> Hi all, my first question here.<br>
><br>
> How safe it is to use controlling_process after spawn? I am using<br>
> additional gen_tcp:controlling_process inside the Mod:Fun itself after few<br>
> additional commands. Is it possible that process will not be owner by then?<br>
><br>
><br>
> Pid = erlang:spawn(Mod, Fun, Args),<br>
><br>
>  gen_tcp:controlling_process(Socket,Pid),<br>
><br>
> Is one-liner safer?<br>
><br>
> gen_tcp:controlling_process(Socket,erlang:spawn(Mod, Fun, Args)),<br>
><br>
><br>
> Thanks,<br>
> Gadi<br>
><br>
><br>
><br>
> _______________________________________________<br>
> erlang-questions mailing list<br>
> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
><br>
><br>
-------------- next part --------------<br>
An HTML attachment was scrubbed...<br>
URL: <<a href="http://erlang.org/pipermail/erlang-questions/attachments/20141103/260ac0e5/attachment-0001.html" target="_blank">http://erlang.org/pipermail/erlang-questions/attachments/20141103/260ac0e5/attachment-0001.html</a>><br>
<br>
------------------------------<br>
<br>
Message: 3<br>
Date: Mon, 3 Nov 2014 04:30:26 -0500<br>
From: Jachym Holecek <<a href="mailto:freza@circlewave.net">freza@circlewave.net</a>><br>
To: Gadi Srebnik <<a href="mailto:gadi@rounds.com">gadi@rounds.com</a>><br>
Cc: <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
Subject: Re: [erlang-questions] spawn and controlling_process<br>
Message-ID: <<a href="mailto:20141103093026.GA18056@circlewave.net">20141103093026.GA18056@circlewave.net</a>><br>
Content-Type: text/plain; charset=us-ascii<br>
<br>
# Gadi Srebnik 2014-11-01:<br>
> How safe it is to use controlling_process after spawn? I am using<br>
> additional gen_tcp:controlling_process inside the Mod:Fun itself after few<br>
> additional commands. Is it possible that process will not be owner by then?<br>
<br>
Yes, there's a race condition there, you need explicit synchronization to<br>
be safe:<br>
<br>
  start_worker(Sock) -><br>
      Pid = erlang:spawn(?MODULE, worker_init, [Sock]),<br>
      gen_tcp:controlling_process(Sock, Pid),<br>
      Pid ! proceed.<br>
<br>
  worker_init(Sock) -><br>
      receive<br>
          proceed -><br>
              %% Okay now we actually own it.<br>
              worker_loop(Sock)<br>
      after 1000 -><br>
          exit(things_seem_awfully_slow_today)<br>
      end.<br>
<br>
I wish there were a variant of controlling_process that would advise the<br>
new owner automatically by sending {tcp_handover, Sock, Info} to it, the<br>
last item being arbitrary term passed by previous owner. No idea how hard<br>
would it be to implement.<br>
<br>
BR,<br>
        -- Jachym<br>
<br>
<br>
------------------------------<br>
<br>
Message: 4<br>
Date: Mon, 3 Nov 2014 11:34:31 +0200<br>
From: Gadi Srebnik <<a href="mailto:gadi@rounds.com">gadi@rounds.com</a>><br>
To: <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
Subject: Re: [erlang-questions] spawn and controlling_process<br>
Message-ID:<br>
        <CAFjX2eC2y8oE4O7COpiwpwhExFv-Zo0Gm+iF_fHexXRZOkh=<a href="mailto:Yg@mail.gmail.com">Yg@mail.gmail.com</a>><br>
Content-Type: text/plain; charset="utf-8"<br>
<br>
Thank you, Jachym and Hynek.<br>
<br>
On Mon, Nov 3, 2014 at 11:30 AM, Jachym Holecek <<a href="mailto:freza@circlewave.net">freza@circlewave.net</a>><br>
wrote:<br>
<br>
> # Gadi Srebnik 2014-11-01:<br>
> > How safe it is to use controlling_process after spawn? I am using<br>
> > additional gen_tcp:controlling_process inside the Mod:Fun itself after<br>
> few<br>
> > additional commands. Is it possible that process will not be owner by<br>
> then?<br>
><br>
> Yes, there's a race condition there, you need explicit synchronization to<br>
> be safe:<br>
><br>
>   start_worker(Sock) -><br>
>       Pid = erlang:spawn(?MODULE, worker_init, [Sock]),<br>
>       gen_tcp:controlling_process(Sock, Pid),<br>
>       Pid ! proceed.<br>
><br>
>   worker_init(Sock) -><br>
>       receive<br>
>           proceed -><br>
>               %% Okay now we actually own it.<br>
>               worker_loop(Sock)<br>
>       after 1000 -><br>
>           exit(things_seem_awfully_slow_today)<br>
>       end.<br>
><br>
> I wish there were a variant of controlling_process that would advise the<br>
> new owner automatically by sending {tcp_handover, Sock, Info} to it, the<br>
> last item being arbitrary term passed by previous owner. No idea how hard<br>
> would it be to implement.<br>
><br>
> BR,<br>
>         -- Jachym<br>
><br>
<br>
<br>
<br>
--<br>
Gadi Srebnik<br>
VP Communications<br>
 m: <a href="tel:%2B972%2054%205929261" value="+972545929261">+972 54 5929261</a><br>
-------------- next part --------------<br>
An HTML attachment was scrubbed...<br>
URL: <<a href="http://erlang.org/pipermail/erlang-questions/attachments/20141103/72d1c16d/attachment-0001.html" target="_blank">http://erlang.org/pipermail/erlang-questions/attachments/20141103/72d1c16d/attachment-0001.html</a>><br>
<br>
------------------------------<br>
<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br>
<br>
End of erlang-questions Digest, Vol 190, Issue 1<br>
************************************************<br>
<br>
--<br>
<br>
<br>
---------------------------------------------------------------------------<br>
<br>
Thanks & Best regards<br>
<br>
李涛涛 Taotao · Li | Fixed Income@Datayes | Software Engineer<br>
<br>
地址:上海市浦东新区陆家嘴西路 99 号万向大厦8 楼, 200120<br>
Address :Wanxiang Towen 8 F, Lujiazui West Rd. No.99, Pudong New District, Shanghai, 200120<br>
<br>
电话 |Phone : 021-60216502 手机 |Mobile: <a href="tel:%2B86-18202171279" value="+8618202171279">+86-18202171279</a><br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br></div></div></div>