注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[每日一Errr~lang] hello world  

2010-02-25 16:27:47|  分类: lang_erlang |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
万事都是从 hello world 开始,我们也不例外。

基本环境
erlang 命令行有三个常用工具:
erl, 整个 erl 虚拟机
erlc, erl source compiler
escript, 直接运行一个简单的脚本

对于大规模的程序,需要写成 erl 规范指定的 app,编译后,部署到 erl 上面跑。
而一般工具类的程序,则 escript 一下即可。

类型入门
erlang 中的 list 就是 [ ]
$ erl
1> Aaa = [aaa,bbb,ccc].
[aaa,bbb,ccc]
其中 Aaa(大写字母开头) 是一个 variable, 类型为 list。而 aaa, bbb(小写字母开头) 类型为 atom,相当于一种程序内使用的 symbol,比如返回值可以写:
foobar() ->
  {ok, "Hello"}.

{ok, Ret} = foobar(),
... use Ret

而 { } 就是一个 tuple,和 python 的概念一样。
剩下的类型 int, float, string 没啥可介绍的,其他语言都一样。

模块入门
erlang 中每个文件就是一个模块,模块中的函数默认是外部不可见的。让外部可见,需要
-export([func_one/1, func_two/3]).
其中 /1, /3 表示这个函数有几个参数。

函数入门
erlang 中没有 C 用大括号 { } 括起来的 block 的概念,所以在语句的结束符上,有些特殊要求。最开始很难习惯这个。
一个函数最后,使用圆点 . 结束。而中间每条语句用逗号 , 结束,如:
foobar(hello, Var) ->
    line one,
    line two;
foobar(goodday, Var) ->
    line three,
    line four;
foobar(_, Var) ->
    other.
为啥会有三个 foobar ??,erlang 中的函数是所谓 pattern match 的,可以在这一层上,就把一些逻辑分开:
foobar(hello, "abc").
foobar(goodday, "wawa").
foobar(whatisthis, "haha").
分别调用了执行了不同的3段内容。

下面用的 io:format 就是 C 的 printf,写法看起来不太一样而已。


HelloWorld示例
-------------------------------------------
% hello.erl
-export([main/1]).

main([YourName]) ->
    io:format("hello world 1~n"),
    io:format("hello ~s~n", [YourName]);

main([YourName, Age]) ->
    io:format("hello world 2~n"),
    io:format("hello ~s, age ~s~n", [YourName, Age]);

main(_) ->
    usage().

usage() ->
    io:format("usage: ~s name [age]~n", [filename:basename(escript:script_name())]),
    halt(1).
-------------------------------------------
$ escript hello.erl
usage: hello.erl name [age]
$ escript hello.erl kasicass
hello world 1
hello kasicass
$ escript hello.erl kasicass 18
hello world 2
hello kasicass, age 18
-------------------------------------------


对应的 C 程序
-------------------------------------------
#include <stdio.h>

void usage(const char *program)
{
    printf("usage: %s name <age>\n", program);
}

int main(int argc, char *argv[])
{
    if ( argc == 2 )
    {
        printf("hello world 1\n");
        printf("hello %s\n", argv[1]);
    }
    else if ( argc == 3 )
    {
        printf("hello world 2\n");
        printf("hello %s, age %s\n", argv[1], argv[2]);
    }
    else
    {
        usage(argv[0]);
    }

    return 0;
}
-------------------------------------------
$ gcc hello.c
$ ./a.out
usage: ./a.out name <age>
$ ./a.out kasicass
hello world 1
hello kasicass
$ ./a.out kasicass 18
hello world 2
hello kasicass, age 18
-------------------------------------------
  评论这张
 
阅读(782)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017