4

Erlang でファーストクラスのようなパターンを作成する方法はありますか? パターンを作成し、引数として他の関数に渡す必要がありますが、Erlang ではパターンがファースト クラスではないことはわかっています。Elixir も調べましたが、パターンに関する限り、それ以上のものは提供されていないようです。

誰かがこの問題に対する簡単な解決策を思いついたのではないかと思っていました。私はこのようなものを実装しようと考えていました:

% Instead of using variables, we would just use uppercase atoms which would serve as vars
% A passable pattern
Pattern = {ok, 'Result'}. 

% Custom function to check for matches
match(pattern, {ok, [1,2,3]}). % => true

私はErlangを初めて使用するので、おそらくこれはまったく不要です。おそらく、この種のことを行うライブラリはありますか?

どんなアドバイスでも大歓迎です。前もって感謝します!

4

4 に答える 4

2

私はあなたの問題全体を見ているかどうかはわかりませんが、述語関数があなたに適しているようです. 関数型言語でジェネリック関数をパラメーター化するのは、かなり一般的な方法です。map、foldl、filter などのリスト関数を見てみましょう。

于 2014-04-08T23:02:56.533 に答える
1

最終的に、Elixir のマクロ機能を使用して、Erlang の match spec に似たものを実装しました。コードはよりきれいに見え (関数をパターンで定義しているだけなので)、Erlang の match spec と非常によく似た働きをします。

于 2014-04-09T22:14:48.417 に答える