2013-04-21 2 views
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]

Я ценю любые предложения о том, как реализовать это, и, как правило, обращаться к элементам списка, который был передан с использованием функции Аноним.

Большое спасибо заранее!

ответ

3

Вы можете использовать списки: карта или списки. Каждая анонимная функция берется из списка как переменная и называется передачей значения.

Использование списков отображения

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). 

Здесь каждый элемент в списке является анонимная функция.

+0

+1, Спасибо за ответ. Как бы вы назвали эту функцию? Когда я пытаюсь использовать свои входные данные, я получаю синтаксическую ошибку. 'mapFuncs (1, [(+3), (* 10), (+ 50)]).' – AnchovyLegend

+1

Уже написано в ответ 'mapFuncs ([fun (Val) -> Val + 3 end, fun (Val) -> Val * 10 end, fun (Val) -> Val + 50 end], 1). Вам нужно отправить список анонимных функций в качестве входных данных. – Vinod

0

Вы можете написать что-нибудь, используя понимание списка.

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

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

Func <- ListFuns The является генератором, это создает список функций для списка понимания. Результатом является Func(Val), говоря, что мы хотим применить функции к значению, переданному в исходную функцию mapList.

Смежные вопросы