0

したがって、次のような関数のリストがあり、匿名関数アクセスを使用してすべての関数をユーザーから渡された[(+3), (*10), (+50)]1に適用する Erlang で関数を作成しようとしている値があるとします。

Haskell では、次のようにします。

mapFuncs funcs val = map(\x -> x val) funcs

しかし、Erlang では、関数のリストのすべての要素をユーザーから渡された値に適用する方法がわかりません。

mapFuncs(Funcs, Val) -> lists:map(fun(X)->X(Val)).

入力:[(+3), (*10), (+50)] , 1

望ましい出力: [4, 10, 51]

これを実装する方法と、匿名関数を使用して渡されたリストの要素にアクセスする一般的な方法についての提案に感謝します。

よろしくお願いします!

4

2 に答える 2

3

lists:map またはリスト内包表記を使用できます。各無名関数は変数としてリストから取得され、値を渡すと呼び出されます。

リスト マップの使用

mapFuncs(Funcs, Val) -> 
    lists:map(fun(Fun)->Fun(Val) end, Funcs).

より強力なリスト内包表記の使用

mapFuncs(Funcs, Val) -> 
    [Fun(Val) || Fun <- Funcs].

関数は次のように呼び出されます

mapFuncs([fun(Val) -> Val + 3 end,
          fun(Val) -> Val * 10 end,
          fun(Val) -> Val + 50 end], 1).

ここで、リスト内の各要素は無名関数です。

于 2013-04-21T17:34:04.247 に答える
0

リスト内包表記を使用して何かを書くことができます。

-module(mylists).
-export([mapList/2]).

mapList(ListFuns, Val) ->
   [ Func(Val) || Func <- ListFuns].

これFunc <- ListFunsはジェネレーターであり、リスト内包表記用の関数のリストを作成します。のFunc(Val)元の関数に渡された値に関数を適用したいという結果ですmapList

于 2013-04-21T17:26:03.137 に答える