true; check-6ren">
gpt4 book ai didi

Erlang编译器不断抛出奇怪的语法错误

转载 作者:行者123 更新时间:2023-12-03 08:00:23 25 4
gpt4 key购买 nike

所以,我正在用 Erlang 制作一个井字游戏,它不断抛出语法错误,我不知道为什么。它发生在检查 X 是否获胜的函数中。这是代码:

checkX(["xxx" | _]) -> true;
checkX([_ | ["xxx" | _]]) -> true;
checkX([_ | [_ | ["xxx" | _]]]) -> true;
checkX(Board) ->
if
xy(Board, {0, 0}) == 120 and xy(Board, {0, 1}) == 120 and xy(Board, {0, 2}) == 120 -> true;

xy(Board, {1, 0}) == 120 and xy(Board, {1, 1}) == 120 and xy(Board, {1, 2}) == 120 -> true;

xy(Board, {2, 0}) == 120 and xy(Board, {2, 1}) == 120 and xy(Board, {2, 2}) == 120 -> true;

xy(Board, {0, 0}) == 120 and xy(Board, {1, 1}) == 120 and xy(Board, {2, 2}) == 120 -> true;

xy(Board, {2, 0}) == 120 and xy(Board, {1, 1}) == 120 and xy(Board, {0, 2}) == 120 -> true;

true -> false

end.

( xy/2 是一个函数,它接受一个板(它是一个字符串列表)和一个元组并返回元组中位置的字符。)当我编译它时它不断抛出这个错误:
board.erl:68: syntax error before '=='

(第 68 行是 if 语句中的第一个条件。)

有谁知道这是为什么?

最佳答案

and绑定(bind)比 == 更紧密.这是您的后卫中的隐式括号:

xy(Board, {0, 0}) == (120 and xy(Board, {0, 1}))

这不是你想要的。你的整个后卫最终类似于:
if 
Board == 2 == 3 -> true;
true -> false
end

这会产生相同的错误。您可以使用一些括号来修复错误:
if 
(Board == 2) == 3 -> true;
true -> false
end

然而,即使你给你的守卫添加了括号,你也会遇到下一个你的守卫错误。见 erlang guards在文档中。也就是说,你不能只调用守卫中的任何函数——在守卫中只能调用有限数量的函数,并且允许的函数在文档中列出。

我建议你从 , 开始而不是 and在编写守卫时,如果您需要其他内容,请进行调整,例如 andalso .

关于Erlang编译器不断抛出奇怪的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60637744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com