2

Erlang コードでは、{tag, value} のリストを持つ辞書のようなデータ構造を使用しています。例: {robot, [{x-pos, 50}, {y-pos, 100}, {speed, 10}] . リスト内の要素の数またはその順序は予測できません。get_xpos、get_ypos などの各パラメーターの値を見つけるためにリストを走査する関数を作成しました。

このように動作する関数を書きたい

function(MyTuple) when get_xpos (MyTuple) > 50 -> stop;
function(MyTuple) when get_ypos (MyTuple) < 50 -> forward.

ユーザー定義関数はガード内で許可されていないか、Erlang では許可されていないため、これは不可能です。このような多くの条件があるため、これらの条件ごとに case ステートメントを記述するのはエレガントではありません。これを行うより良い方法はありますか?

4

1 に答える 1

1

あなたはこれを行うことができます:

aux_fun(TupleList) -> fun(get_xpos(TupleList), get_ypos(TupleList)).

fun(XPos, YPos) when XPos > 50 -> stop;
fun(XPos, YPos) when YPos < 50 -> forward.
于 2013-02-22T11:44:23.537 に答える