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

我一直在试图学习Erlang,并且在函数和case语句结束行时遇到了一些问题。

也就是说,我什么时候在我的函数或case语句中使用分号,逗号或句点?

我已经得到了东西的工作,但我不明白为什么,并正在寻找更多的信息。

逗号在一行正常代码的末尾。
在case case语句结尾的分号,或者if语句等等。最后一个case或者if语句末尾没有任何内容。 一个函数结束的时期。

例子(抱歉随机variables的名字,显然这并没有做任何事情,但说明了一点):

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 

我喜欢把分号读作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* 

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

期间(。)

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

请记住,具有不同元素的函数的定义被认为是单独的语句,因此每个函数都会被一个句点终止。

例如, hello/0hello/1:的函数定义hello/1:

 hello() -> hello_world. hello(Greeting) -> Greeting. 

(请注意,在erlang shell中,句点用于终止和评估expression式,但这是一个exception。)

分号(;)

分号用作子句分隔符,用于函数子句和expression式分支。

例1,function从句:

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

例2,expression式分支:

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

逗号(,)

逗号是expression式分隔符。 如果一个逗号跟在一个expression式之后,这意味着在该子句之后还有另一个expression式。

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

你可以把它想成英文标点符号。 逗号用于分隔一系列事物,分号用于分隔两个非常紧密相关的独立子句[1](例如,case语句的不同情况,相同名称和不同模式匹配的function子句)和句点被用来结束一个句子(完整的想法)。

  1. 或者certificate你上了大学。 “不要用分号,他们是异装癖的雌雄同体,绝对没有什么,只是表明你已经上过大学了。 – Kurt Vonnegut

逗号分隔expression式,参数或列表/元组或二进制元素。 这是过度劳累。