繁体   English   中英

Erlang中的语法错误

[英]Syntax Error in Erlang

我是该语言的新手,试图弄清楚一个简单函数的格式,该函数返回二次方程的根。

    discriminant(A,B,C) -> 
        B * B - 4 * A * C.

    get_roots(A,B,C) when A == 0 -> error;
    get_roots(A,B,C) when discriminant(A,B,C) == 0  -> [(-B/(2*A))];
    get_roots(A,B,C) when discriminant(A,B,C) > 0   -> 
        D = discriminant(A,B,C);
        [((-1 * B + math:sqrt(D)) / 2 * A), ((-1 * B - math:sqrt(D)) / 2 * A)];
    get_roots(A,B,C) when discriminant(A,B,C) < 0   -> [].

我犯的语法错误是什么? 当我在外壳中输入“ c(ps04)”(其中ps04.erl是我编写函数的文件)时遇到的错误是:

    ps04.erl:15: syntax error before: '['
    ps04.erl:23: Warning: variable 'Head' is unused %for a different function defined later
    error

您不能在守护程序中使用函数,因此get_roots(A,B,C) when discriminant(A,B,C) == 0get_roots(A,B,C) when discriminant(A,B,C) == 0被禁止。 就像@Amon提到的那样,应该用逗号代替分号。 我会这样写函数:

get_roots(0,0,_) -> [];
get_roots(0,B,C) -> [-C/B];
get_roots(A,B,C) -> get_roots(A,B,C,A*A-4*B*C).

get_roots(A,B,C,0) -> [-B/(2*A)];
get_roots(A,B,C,D) when D > 0 ->
    RD = math:sqrt(D),
    [(-B+RD)/(2*A),(-B-RD)/(2*A)];
get_roots(_,_,_,_) -> [].

您应该在D = discriminant(A,B,C);替换分号D = discriminant(A,B,C); 带有逗号: D = discriminant(A,B,C), ,。

通过使用分号,您将结束此特定的get_roots/3函数子句,这不是您想要的(显然,它下面有一个附加子句)。

附带一提,我从您的其他两个问题中注意到,您从未接受过答案。 如果有人回答了您的问题,并且这是有效的解决方案,请单击该答案旁边的对勾。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM