Erlang 二郎:“;“预结束”;元组中的元素

Erlang 二郎:“;“预结束”;元组中的元素,erlang,Erlang,是否可以编写一个与此函数相当的更快的函数 prepend(X, Tuple) -> list_to_tuple([X | tuple_to_list(Tuple)]). 在我看来,这类事情是令人沮丧的。如果你想要一个列表,就用一个 : 元组中有固定数量的内容。如果可能的元组长度有限,可以执行以下操作: prepend(X, {}) -> {X}; prepend(X, {A}) -> {X, A}; prepend(X, {A, B}) -> {X, A, B};

是否可以编写一个与此函数相当的更快的函数

prepend(X, Tuple) ->
  list_to_tuple([X | tuple_to_list(Tuple)]).

在我看来,这类事情是令人沮丧的。如果你想要一个列表,就用一个

:


元组中有固定数量的内容。如果可能的元组长度有限,可以执行以下操作:

prepend(X, {}) -> {X};
prepend(X, {A}) -> {X, A};
prepend(X, {A, B}) -> {X, A, B};
prepend(X, {A, B, C}) -> {X, A, B, C}.

您可以根据需要继续此模式。

由于预先添加元素与将其插入位置1相同,您可以使用内置功能:


这个函数是在Erlang/OTP R16A中添加的。

如果您想要一个动态结构,可以使用列表。我的实际使用情况是,我有几个函数返回“原始”元组(例如,
{Name,Age}
),并且更愿意将它们转换为标记元组(
{person,Name,Age}
)。我根本不想要一个动态的结构。更深层次的结构适合你吗?比如{person,{Name,Age}}?所以您可以使用以下标记调用函数:{person,who(Args)}。。
> erlang:insert_element(1, {a, b}, z).
{z,a,b}