我是该语言的新手,并试图找出一个返回二次方程根的简单函数的格式。
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 -> [].
我所犯的语法错误是什么?我输入&#34; c(ps04)&#34;时得到的错误在shell中,其中ps04.erl是我编写函数的文件,是:
ps04.erl:15: syntax error before: '['
ps04.erl:23: Warning: variable 'Head' is unused %for a different function defined later
error
答案 0 :(得分:5)
您不能在守卫中使用某项功能,因此禁止使用get_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(_,_,_,_) -> [].
答案 1 :(得分:4)
您应该使用逗号替换D = discriminant(A,B,C);
中的分号:
D = discriminant(A,B,C),
。
通过使用分号,您将结束此特定的get_roots/3
函数子句,这不是您想要的(显然,您在其下面还有一个附加子句)。
另一方面,我从你的其他两个问题中注意到你从未接受过答案。如果有人回答了您的问题并且这是一个有效的解决方案,请点击该答案旁边的复选标记。