¿Es posible escribir un equivalente más rápido a esta función?Erlang: "anteponer" un elemento a una tupla
prepend(X, Tuple) ->
list_to_tuple([X | tuple_to_list(Tuple)]).
¿Es posible escribir un equivalente más rápido a esta función?Erlang: "anteponer" un elemento a una tupla
prepend(X, Tuple) ->
list_to_tuple([X | tuple_to_list(Tuple)]).
Como anteponiendo un elemento es el mismo que el de insertarlo en la posición 1, se puede utilizar la función incorporada erlang:insert_element/3
:
> erlang:insert_element(1, {a, b}, z).
{z,a,b}
Esta función se añadió en Erlang/OTP R16a.
Me parece que ese tipo de cosas no se recomienda. Si quieres una lista, usa una.
tuplas tienen un número fijo de cosas en ellos.
Si usted tiene un número finito de posibles longitudes de tupla, se puede hacer esto:
prepend(X, {}) -> {X};
prepend(X, {A}) -> {X, A};
prepend(X, {A, B}) -> {X, A, B};
prepend(X, {A, B, C}) -> {X, A, B, C}.
Puede seguir este patrón durante todo el tiempo que necesita.
Definitivamente, si desea una estructura dinámica use listas en su lugar. – rvirding
Mi caso de uso real es que tengo varias funciones que devuelven tuplas "en bruto" (por ejemplo, '{Nombre, Edad}') y preferiría convertirlas en tuplas etiquetadas ('{persona, Nombre, Edad}'). No quiero una estructura dinámica en absoluto. –
¿la estructura más profunda está bien para usted? como {person, {Name, Age}}? Entonces puedes llamar a la función con esta etiqueta: {person, who (Args)} .. – user425720