在elixir中是否有等同于Haskell的init函数?

时间:2015-12-16 10:23:01

标签: functional-programming elixir

在Haskell中,init函数返回列表中除最后一个元素之外的所有元素 例如,init [1, 2, 3]会返回[1, 2]

Elixir有类似的功能吗?

我无法在EnumList模块中找到任何类似的功能。

3 个答案:

答案 0 :(得分:8)

如果您愿意,也可以使用instance method,它会删除集合中的第一个计数项目。 如果给出负值计数,则最后的计数值将被删除。

[1,2,3] |> Enum.drop(-1) # [1,2]

答案 1 :(得分:4)

您可以使用Enum.slice/2提供带有否定结尾的decreasing range来执行此操作:

[1, 2, 3] |> Enum.slice(0..-2) # [1, 2]

答案 2 :(得分:1)

在这些情况下确认怀疑总是很好,所以这是比较两者的基准:

Settings:
  duration:      1.0 s

## ListBench
[13:29:22] 1/2: Enum.drop(-1)
[13:29:26] 2/2: Enum.slice(0..-2)

Finished in 7.41 seconds

## ListBench
benchmark name     iterations   average time
Enum.drop(-1)           50000   72.32 µs/op
Enum.slice(0..-2)       10000   273.16 µs/op

是的,Enum.drop是首选方案。