【问题标题】:Basic example of Map in ErlangErlang 中 Map 的基本示例
【发布时间】:2013-04-18 03:54:27
【问题描述】:

学习 Erlang 的第 2 天。我试图通过创建一个简单的 map 函数来学习在 Erlang 中使用 Map 的基础知识,该函数接受任何谓词和列表(由用户传入)并检查谓词是否返回 true 或 false 并将结果存储在列表中。

因此,如果用户传入(> 3) 作为谓词并且列表包含[3,4,5],则所需的输出将是[false, true, true]

这是我尝试过的:

applyMap (P, LST) -> lists:map(P LST).  

感谢任何有关如何执行此操作的建议。

提前非常感谢!

【问题讨论】:

  • 您的尝试有什么问题?我想你希望你的谓词是这样的:fun(x) -> x > 3 end
  • 感谢您的回复。我的实现出现语法错误。 X是什么?你从哪里弄来的?注意:谓词由用户传入。
  • 我不是专家,但我认为您想传递一个匿名函数,例如 lists:map(fun(Val) -> Val > 3 end, LST). 这将返回 [false, true, true]
  • 我最近一直在使用 SML 进行类项目,并且有 op 关键字作为二元运算符,但不知道您是否可以将其应用于大于运算符。

标签: erlang


【解决方案1】:

我认为您在致电lists:map 时只是在PLST 之间缺少,。试试这个:

applyMap (P, LST) -> lists:map(P, LST).

如果你将匿名函数fun(X) -> X > 3 end 传递给你的applyMap,你应该得到你想要的输出。

例子:

applyMap (fun(X) -> X > 3 end, LST).

【讨论】:

  • +1,感谢您的回复。您能否说明当用户调用 applyMap 并传入参数时函数调用会是什么样子?我对如何在 Erlang 中传递谓词或任何函数感到困惑?
  • 感谢您的回复。因此,如果模块名称是functions,您的方法是可以将谓词传递给函数applyMap 的唯一方法吗? funtions:applyMap(fun(X)->X > 3 end, [1,2,3]). 我们不能做类似functions:applyMap(>3, [1,2,3]).的事情??
  • 可以将函数赋值给一个变量,比如Pred = fun(X) -> X > 3 end.,然后调用functions:applyMap(Pred, [1,2,3]).。谓词必须是一个函数。
  • 您还可以使用语法fun name/arity 编写表达式来计算命名函数,例如fun lists:map/2。这在将已定义的函数映射到列表时会很有帮助。
【解决方案2】:

有两个问题:首先,您缺少PLST 之间的逗号,其次,您不能使用像(> 3) 这样的Haskell 风格的柯里化函数。 lists:map((> 3), [1,2,3]) 在 Erlang 中不正确。

在 Haskell 中,(> 3)\n -> n > 3 的柯里化形式。在 Erlang 中,你必须明确地写出来:

lists:map(fun(N) -> N > 3 end, [2,4,6])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 2013-10-22
    相关资源
    最近更新 更多