Syntax 在Erlang中,何时使用;或者,或者。?
我一直在尝试学习Erlang,在函数和Syntax 在Erlang中,何时使用;或者,或者。?,syntax,erlang,punctuation,Syntax,Erlang,Punctuation,我一直在尝试学习Erlang,在函数和case语句中遇到了一些关于结束行的问题 什么时候在函数或语句中使用分号(;)、逗号(,)或句点?在普通代码行的末尾使用逗号。 case语句末尾的分号,或if语句等。 最后一个case或if语句结尾没有任何内容。 函数末尾的一个句点 示例(对随机变量名表示抱歉,显然这没有任何作用,但说明了一点): 你可以把它想象成英语标点符号。逗号用于分隔一系列的事物,分号用于分隔两个密切相关的独立子句[1](例如case语句的不同大小写,相同名称和算术的函数子句匹配不同模
case
语句中遇到了一些关于结束行的问题
什么时候在函数或语句中使用分号(
;
)、逗号(,
)或句点?在普通代码行的末尾使用逗号。case语句末尾的分号,或if语句等。 最后一个case或if语句结尾没有任何内容。 函数末尾的一个句点 示例(对随机变量名表示抱歉,显然这没有任何作用,但说明了一点):
你可以把它想象成英语标点符号。逗号用于分隔一系列的事物,分号用于分隔两个密切相关的独立子句[1](例如case语句的不同大小写,相同名称和算术的函数子句匹配不同模式),句点用于结束一个句子(完整思想)
我喜欢把分号读作或,逗号读作和,句号读作结尾。所以
foo(X) when X > 0; X < 7 ->
Y = X * 2,
case Y of
12 -> bar;
_ -> ook
end;
foo(0) -> zero.
foo(X)当X>0时;X<7->
Y=X*2,
案例Y
12->bar;
_->ook
结束;
foo(0)->0。
读作
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*
当X>0*或*X<7->
Y=X*2*和*
案例Y
12->bar*或*
_->好的
结束*或*
foo(0)->零*结束*
这应该清楚地说明为什么没有;在大小写的最后一个子句之后。逗号分隔表达式、参数、列表/元组或二进制的元素。工作过度。期间(.) 在模块中,句点用于终止模块属性和函数声明(也称为“表单”)。您可以记住这一点,因为表单不是表达式(它们不会返回值),因此句点表示语句的结束 请记住,具有不同算术数的函数的定义被视为单独的语句,因此每个语句都会以句点结束 例如,
hello/0
和hello/1:
hello() -> hello_world.
hello(Greeting) -> Greeting.
(请注意,在Erlangshell中,句点用于终止和计算表达式,但这是一种异常情况。)
分号(;)
分号用作子句分隔符,用于函数子句和表达式分支
例1,函数子句:
factorial(0) -> 1;
factorial(N) -> N * fac(N-1).
示例2,表达式分支:
if X < 0 -> negative;
X > 0 -> positive;
X == 0 -> zero
end
喜欢冯内古特的名言!我一定要强调分号的用法;它们真的应该被更多地使用。Erlang标点符号显然是受散文标点符号的启发。在函数子句末尾使用分号,而函数子句并没有结束函数(正如marcc所解释的,函数结束时使用点)。命名函数结束时使用点。匿名函数以end关键字终止。还可以在-include()和-compiler指令之后使用点。最好把这段时间想象成最后的终结者。这是“结束”,其中逗号和分号是分隔符。正如下面所说的。逗号用作系列的分隔符,分号用作备选方案的分隔符和&;=或者是一个很好的记忆方式。我刚开始学习Erlang,这非常有用。谢谢。很好的例子,但是什么时候
X>0;X<7
是否有错误?非常有用的方法,非常自然。我也只启动erlang,但我可以建议这样一个注释:没有;在大小写的最后一个子句之后,因为分号不是在子句之后——它是介于之间的。分号和逗号表示子句的连接方式。句号标志着该条款的结束(因此,它确实在stuff的末尾)。这个逻辑似乎来自于二郎的Prolog起源,但我不能说,我只读了“LearnyYouSomeerlang”。干杯!我猜你会支持这个,除了那个。是7个月没碰过了,15个月前蟋蟀回答了这个问题。在BEAM语言的编译中,似乎只有一个还在开发中。@Warrenyong看到我是Erlang语法背后的人之一,我对它没有任何问题。:-)LFE并没有死,它刚刚达到需要一些认真的用户来获得改进和开发的投入的阶段。Erlang的另一种lisp语法是Joxa。我个人看不出ruby语法的魅力。是的,我知道你是谁。(“你好,罗伯特!”)我在想,如果你有机会重做一遍,这次你可能不会把你的新语言的语法建立在Prolog的基础上。至于LFE,因此LFE的最大分享潜力约为0.0033%。它的潜力可能会进一步被愿意使用辅助前端的Erlang系统用户的一小部分所削减。你可能不喜欢Ruby,但现在它和类似的语言更受欢迎。@Warrenyong我不知道,也许吧。或者选择更像其他函数式语言的语法。我不会将它建立在类似C/Java的基础上,因为我认为语义“fit”太糟糕了。我已经做了很多C语言编程,所以我非常习惯这种语法风格,这两种语言都没有问题。我不认为学习新语法是个问题,它是学习新语言中问题最少的部分。这只是一个RTFM。我们可以在这一点上达成一致:C++FE是一个永远不应该存在的项目是的,当我学习erlang的时候,有一件事咬了我一口,那就是;在最后一个子句的末尾,例如,在示例2中的X==0->zero
之后。
if X < 0 -> negative;
X > 0 -> positive;
X == 0 -> zero
end
hello(Greeting, Name) ->
FullGreeting = Greeting ++ ", " ++ Name,
FullGreeting.