Functional programming 是否有与Haskell';长生不老药中的s init函数?

Functional programming 是否有与Haskell';长生不老药中的s init函数?,functional-programming,elixir,Functional Programming,Elixir,在Haskell中,init函数返回列表中除最后一个元素之外的所有元素。 例如,init[1,2,3]将返回[1,2] 长生不老药有类似的功能吗? 我在枚举或列表模块中找不到任何类似的函数。您可以通过提供一个负端来实现这一点: [1, 2, 3] |> Enum.slice(0..-2) # [1, 2] 如果您愿意,还可以使用,它会从集合中删除第一个计数项。如果给定负值计数,则将删除最后一个计数值 在这些情况下,确认怀疑总是很好的,因此这里有一个比较这两者的基准: Settings:

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

长生不老药有类似的功能吗?

我在
枚举
列表
模块中找不到任何类似的函数。

您可以通过提供一个负端来实现这一点:

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

如果您愿意,还可以使用,它会从集合中删除第一个计数项。如果给定负值计数,则将删除最后一个计数值


在这些情况下,确认怀疑总是很好的,因此这里有一个比较这两者的基准:

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
是首选选项。

我想说Enum.drop的行为更接近原始提问者询问的初始行为。同意,
Enum.drop(list,-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