10

私は Erlang を使用して Haskell の宿題をすべてやり直そうとしています。1 つのことは、すべてのパラメーターを持たない関数のリストを使用する方法です。

例: このフォールドを使用しようとしていますが、アキュムレータで動作するように関数を渡す方法がわかりません

%%inside my module)
add(X,Y) -> X + Y.

multiply(X,Y) -> X*Y.

その後、コマンドラインでこれを使用します:

lists:foldl(fun(Function,Accumulator) -> Function(Accumulator) end, 3, [add(3),multiply(5)]).
4

5 に答える 5

13

Erlang では、必要なすべてのパラメーターを渡して関数を呼び出す必要があります。ただし、必要なパラメーターのみを受け取り、関数を正しく呼び出す無名関数を作成することで、簡単に回避できます。1 つのパラメーター X を取り、関数 add(3, X) を呼び出す関数が必要な場合は、次のような無名関数を作成できます。

fun (X) -> add(3, X) end

これはあなたのタスクの例です:

lists:foldl(fun (Function, Accumulator) -> Function(Accumulator) end, 3,
    [fun (X) -> add(3, X) end, fun (X) -> multiply(5, X) end]).
于 2013-04-24T06:18:50.177 に答える
5

ネイティブ Erlang に関して言えば、あなたが望むような部分評価の形式はありません。それを行うには、独自の楽しみを作成する必要があります。ただし、Erlando Monad Libraryを使用する場合は、パターン マッチングを使用して作成できます。これは、erlang コンパイラーがコードのコンパイルで AST をいじることができるという事実によって機能するので、このようなクールなことを行うことができます。

于 2013-04-26T14:43:49.717 に答える
0
lists:foldl(
    fun(Function,Accumulator) -> Function(Accumulator) end, 
    3, 
    [
        fun(X) -> modname:add(3, X) end, 
        fun(X) -> modname:multiply(5, X) end
    ]
).
于 2013-04-24T05:57:52.707 に答える