You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Erlang编写RPS游戏时函数无法结束,报end前语法错误

Erlang石头剪刀布代码语法错误修复

你的代码存在几个明显的语法结构问题,导致出现syntax error before: 'end'的报错,具体问题和修复方案如下:

核心错误点

  • 匿名函数定义不完整:Erlang的匿名函数必须以end闭合,你写的Win和Lose函数只写了开头部分,缺少end收尾,且函数体末尾不该加逗号。
  • 多if语句结构混乱:连续使用独立if却未逐个闭合,且这种场景用case表达式更符合Erlang风格,结构更清晰。
  • 函数整体结构不匹配:未闭合的if和不完整的匿名函数,导致最后用来结束rps()的end.无法正确匹配上层结构。

修正后的完整代码

-module(project).
-export([rps/0]).

rps() ->
    % 初始化随机数种子,否则每次运行随机结果固定
    rand:seed(exsplus, os:timestamp()),
    Computer = rand:uniform(3),
    {ok, Player} = io:read("Rock, Paper, or Scissors? "),
    Win = fun() -> io:fwrite("You Win!~n") end,
    Lose = fun() -> io:fwrite("You Lose.~n") end,

    % 用case替代嵌套if,逻辑更清晰
    case Player of
        "Rock" ->
            case Computer of
                3 -> Win(); % 3代表剪刀,石头赢剪刀
                2 -> Lose() % 2代表布,布赢石头
            end;
        "Paper" ->
            case Computer of
                1 -> Win(); % 1代表石头,布赢石头
                3 -> Lose() % 3代表剪刀,剪刀赢布
            end;
        "Scissors" ->
            case Computer of
                2 -> Win(); % 2代表布,剪刀赢布
                1 -> Lose() % 1代表石头,石头赢剪刀
            end;
        _ -> io:fwrite("无效输入!请输入Rock、Paper或Scissors。~n")
    end.

额外优化说明

  • 新增随机数种子初始化,解决Erlang默认随机数固定的问题。
  • 增加无效输入处理分支,避免用户输入不符合要求时程序出错。
  • 用case替代嵌套if,更符合Erlang的惯用写法,代码可读性更强。

内容的提问来源于stack exchange,提问作者Newman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 08:30:52