0

次のコードのコンパイルに問題があります。

2> c(match).
match.erl:13: syntax error before: '{'
match.erl:2: function receiver/0 undefined
error

match.erl

-module(match).
-export([receiver/0]).

receiver() ->
    receive
        {From, A, B} ->
            case A =:= B of
                true ->
                    From ! "true";
                false ->
                    From ! "false"
            end
        {From, A, B, C}->
            case A =:= B =:= C of
                true ->
                    From ! "true";
                false ->
                    From ! "false"
            end
    end.

試合前に可能な限りすべてのセミコロン、ピリオド、コンマを試してみましたが{From, A, B, C}->、何も機能しないようです。これは、アーランの構文が悪夢であるところです!

4

2 に答える 2

5

パターンマッチングを使用してください

-module(match).
-export([receiver/0]).

receiver() ->
    receive
        {From, A, A} ->
                    From ! "true";
        {From, _, _} ->
                    From ! "false";
        {From, A, A, A}->
                    From ! "true";
        {From, _, _, _}->
                    From ! "false"
    end.

または警備員

-module(match).
-export([receiver/0]).

receiver() ->
    receive
        {From, A, B} when A =:= B ->
                    From ! "true";
        {From, _, _} ->
                    From ! "false";
        {From, A, B, C} when A =:= B andalso A =:= C ->
                    From ! "true";
        {From, _, _, _}->
                    From ! "false"
    end.

またはブール演算子

-module(match).
-export([receiver/0]).

    receiver() ->
        receive
            {From, A, B} ->
                case A =:= B of
                    true ->
                        From ! "true";
                    false ->
                        From ! "false"
                end;
            {From, A, B, C}->
                case A =:= B andalso A =:= C of
                    true ->
                        From ! "true";
                    false ->
                        From ! "false"
                end
        end.
于 2013-03-13T21:19:07.187 に答える
2

'A =:= B =:= C'でやろうとしているように、3つの値を比較することはできないと思います。それらのうちの2つだけを比較すると、コードがコンパイル可能になります。

于 2013-03-13T21:16:31.550 に答える