学习Erlang的第2天。我试图通过创建一个简单的map函数来学习在Erlang中使用Map的基础知识,该函数接受任何谓词和列表(由用户传入)并检查谓词是返回true还是false并将结果存储在列表中。
因此,如果用户传入(> 3)
作为谓词且列表包含[3,4,5]
,则所需的输出将为[false, true, true]
。
这就是我的尝试:
applyMap (P, LST) -> lists:map(P LST).
我很感激有关如何做到这一点的任何建议。
非常感谢提前!
答案 0 :(得分:2)
我认为您在致电,
时错过了P
和LST
之间的lists:map
。试试这个:
applyMap (P, LST) -> lists:map(P, LST).
如果您将匿名函数fun(X) -> X > 3 end
传递给applyMap
,则应获得所需的输出。
示例:
applyMap (fun(X) -> X > 3 end, LST).
答案 1 :(得分:0)
有两个问题:首先,你错过了P
和LST
之间的逗号,但其次,你不能使用Haskell风格的curried函数,如(> 3)
。 Erlang中lists:map((> 3), [1,2,3])
不正确。
在Haskell中,(> 3)
是\n -> n > 3
的curry形式。在Erlang中,您必须明确地编写它:
lists:map(fun(N) -> N > 3 end, [2,4,6])