Syntax 在Erlang中,何时使用;或者,或者。?

Syntax 在Erlang中,何时使用;或者,或者。?,syntax,erlang,punctuation,Syntax,Erlang,Punctuation,我一直在尝试学习Erlang,在函数和case语句中遇到了一些关于结束行的问题 什么时候在函数或语句中使用分号(;)、逗号(,)或句点?在普通代码行的末尾使用逗号。 case语句末尾的分号,或if语句等。 最后一个case或if语句结尾没有任何内容。 函数末尾的一个句点 示例(对随机变量名表示抱歉,显然这没有任何作用,但说明了一点): 你可以把它想象成英语标点符号。逗号用于分隔一系列的事物,分号用于分隔两个密切相关的独立子句[1](例如case语句的不同大小写,相同名称和算术的函数子句匹配不同模

我一直在尝试学习Erlang,在函数和
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.