初识Erlang,Hello World(4)

前几节的Hello world都是自言自语,今天试试对着别人说。首先是在本机上各个进程之间, 然后是在网络上不同机器之间。

进程间的消息:单向接收

Erlang里可以很方便地创建进程,这种进程是超轻量级的,运行于erlang虚拟机内部的, 而与操作系统的进程管理无关的(也就是说你在任务管理器中只会见到一个Erlang进程), Erlang内的进程创建开销很小,创建一个进程所需的时间仅为微秒级,内存消耗也很少, 一台机上运行数以千计的进程也没问题。

进程之间使用消息进行通讯。示例如下:

    hw15srv() ->
        receive
            {name, Name} ->
                io:format("Hello ~p ~n", [Name]),
                hw15srv()
        end.

    hw15() ->
        Pid = spawn(fun hw15srv/0),
        Pid ! {name, "alice"},
        Pid ! {name, "Bob"}.

hw15/0首先是使用spawn命令启动了一个hw15srv/0进程 …

more ...

初识Erlang,Hello World(3)

今天不只要对World说Hello,还要对别人说Hello

    hw(Who) ->
        io:format("Hello ~p ~n", [Who]).

平平无奇的一个函数,对Who说Hello

如果要对一组人说Hello,可以这么做:

    hw10(L) ->
        [hw(X) || X <- L].

    hw10() ->
        L = ["ali", "bob", "cat"],
        hw10(L).

上面是用了列表解析的方法。

也可以用lists:map,效果和上面是一样的

    hw11(L) ->
        lists:map(fun hw/1, L).

    hw11() ->
        L = ["ali", "bob", "cat"],
        hw11(L).

另一个很相似的做法是lists:foreach:

    hw14(L …
more ...

初识Erlang,Hello World (1)

这两天开始玩Erlang,咱们从Hello World开始吧。

先是要到官网http://www.erlang.org/download.html下载安装包,安装上,设置好系 PATH,然后打开命令行,输入erl,如果看到类似于

Eshell V5.10.1  (abort with ^G)
1>

的话,就表示Erlang安装成功。这东西叫做Erlang的Shell。

然后就是最经典的Hello World:

随便用一个文本编辑器输入:

    -module(helloworld).
    -export([hw/0]).

    hw() -> io:format("Hello World! ~n").

保存为helloworld.erl,然后在命令行下进入该文件所在目录,进入Erlang Shell,输 入 …

more ...

初识Erlang,Hello World (2)

昨天费了老大劲终于把Hello World打出来了,今天我们继续。

说N遍Hello World,递归的使用

Hello World说一遍怎么够呢,说N遍吧。代码如下:

    -module(helloworld).
    -export([hw3/1]).

    % 打印N遍Hello world
    hw3(N) when N > 0 ->
        io:format("Hello World ~n"),
        hw3(N-1);

    hw3(0) -> ok.

这有什么好坑的呢:

    hw3(N) when N > 0 ->

when后面是一个断言(guard),仅在它为true时函数会被执行。

断言所能使用的语句是受限的,不能用自定义的函数。

    io:format("Hello World ~n"),
    hw3 …
more ...