在Erlang,我什么时候使用;或者,或。?

时间:2009-07-10 16:30:14

标签: erlang punctuation

我一直在努力学习Erlang,并且在函数和case语句的结尾处遇到了一些问题。

即,何时在我的函数或case语句中使用分号,逗号或句点?

我已经开始工作,但我并不理解为什么,并且正在寻找更多信息。

5 个答案:

答案 0 :(得分:49)

我喜欢将分号读为OR,逗号为AND,完全停止为END。所以

foo(X) when X > 0; X < 7 ->
    Y = X * 2,
    case Y of
        12 -> bar;
        _  -> ook
    end;
foo(0) -> zero.

读为

foo(X) when X > 0 *OR* X < 7 ->
    Y = X * 2 *AND*
    case Y of
        12 -> bar *OR*
        _  -> ok
    end *OR*
foo(0) -> zero *END*

这应该清楚为什么没有;在案件的最后一个条款之后。

答案 1 :(得分:46)

一行正常代码末尾的逗号。
案例陈述结束时的分号,或if语句等。 最后一个case或if语句最后没有任何内容。 功能结束时的一段时间。

示例(抱歉随机变量名称,显然这没有做任何事情,但说明了一点):

case Something of 
    ok ->
        R = 1,     %% comma, end of a line inside a case 
        T = 2;     %% semi colon, end of a case, but not the end of the last
    error ->
        P = 1,     %% comma, end of a line inside a case
        M = 2      %% nothing, end of the last case
end.               %% period, assuming this is the end of the function, comma if not the end of the function

答案 2 :(得分:22)

期间(。)

在模块中,句点用于终止模块属性和函数声明(a.k.a。'forms')。您可以记住这一点,因为表单不是表达式(没有从它们返回值),因此句点表示语句的结尾。

请记住,具有不同arities的函数的定义被视为单独的语句,因此每个函数都将被句点终止。

例如,hello/0hello/1:

的函数定义
hello() -> hello_world.

hello(Greeting) -> Greeting.

(注意,在erlang shell中,句点用于终止和计算表达式,但这是一个异常。)

分号(;)

分号充当子句分隔符,用于函数子句和表达式分支。

示例1,函数子句:

factorial(0) -> 1;
factorial(N) -> N * fac(N-1).

示例2,表达分支:

if X < 0  -> negative;
   X > 0  -> positive;
   X == 0 -> zero
end

逗号(,)

逗号是表达式分隔符。如果逗号跟在表达式后面,则表示在子句中有另一个表达式。

hello(Greeting, Name) -> 
    FullGreeting = Greeting ++ ", " ++ Name,
    FullGreeting.

答案 3 :(得分:3)

你可以把它想象成英文标点符号。逗号用于分隔系列中的事物,分号用于分隔两个非常密切相关的独立子句[1](例如案例陈述的不同情况,同名的函数子句和符合不同模式的arity)和句点用于结束一个句子(完整的想法)。

  1. 或证明你上大学。 “不要使用分号。它们是异装癖的雌雄同体,绝对没有任何东西。他们只是表明你已经上大学了。” - Kurt Vonnegut

答案 4 :(得分:3)

逗号分隔表达式,参数或列表/元组或二进制元素。它过度劳累了。