【问题标题】:Erlang foreach gives error: syntax error before: ')'Erlang foreach 给出错误:之前的语法错误:')'
【发布时间】:2014-06-08 10:05:30
【问题描述】:

我正在做一个并行的 sodukusolver,但现在程序给了我一个错误。我试图并行生成测试不同可能解决方案的进程。部分代码如下。

par_solve_refined(M) ->
  case solved(M) of
    true ->
      M;
    false ->
      %% split into chunks to control granularity
      Chunks = partition(2, guesses(M)),
      Parent = self(),
      %% here below the program gives an error: "syntax error before: ')'"
      foreach(fun(I) -> spawn(fun() -> Parent ! solve_one(I) end) end, Chunks),
      receive
        Solution -> Solution
      end
  end.        

partition(_, []) ->
   [];
partition(N, L) ->
   try case lists:split(N, L) of
        {Fst, Snd} -> [Fst|partition(N, Snd)]
       end
   catch
     error:badarg -> [L]
end.

【问题讨论】:

  • “给我一个错误”不是正确的描述。请指定打印的错误和位置。
  • 我认为你需要一个 '.'在上一行的end 之后。
  • spawn( 之后的括号似乎没有关闭。
  • @Netch 好的,谢谢,但这还不是全部......
  • 第一个fun也应该用对应的end关闭。

标签: erlang


【解决方案1】:

lists:foreach(Function, List) 可能是你需要的函数。

【讨论】:

    【解决方案2】:

    请试试这个:

    lists:foreach(fun(I) -> spawn(fun() -> Parent ! solve_one(I) end) end, Chunks)
    

    【讨论】:

    • 有什么问题?我运行这段代码,一切正常。
    • 我现在看到是对solve_one 的调用不起作用。谢谢。
    • 你能和我分享你的代码吗?我想了解suku,我觉得你的想法非常好,用很多过程来检查每一个结果。
    • 给我你的电子邮件,我给你发一份代码副本。我不能在互联网上分享它,因为我正在改进别人的顺序代码。这是一个学校作业。
    猜你喜欢
    • 2014-03-19
    • 2011-04-06
    • 2015-02-24
    • 1970-01-01
    • 2019-03-09
    • 2015-01-27
    • 2022-01-12
    • 2012-05-16
    • 2018-12-22
    相关资源
    最近更新 更多