Có thể viết tương đương nhanh hơn với hàm này không?Erlang: "thêm trước" một phần tử vào một bộ tóan
prepend(X, Tuple) ->
list_to_tuple([X | tuple_to_list(Tuple)]).
Có thể viết tương đương nhanh hơn với hàm này không?Erlang: "thêm trước" một phần tử vào một bộ tóan
prepend(X, Tuple) ->
list_to_tuple([X | tuple_to_list(Tuple)]).
Như prepending một yếu tố cũng giống như chèn nó ở vị trí 1, bạn có thể sử dụng được xây dựng trong chức năng erlang:insert_element/3
:
> erlang:insert_element(1, {a, b}, z).
{z,a,b}
Chức năng này đã được bổ sung trong Erlang/OTP R16A.
Dường như với tôi điều đó không được khuyến khích. Nếu bạn muốn một danh sách, hãy sử dụng một danh sách.
Tuples có số lượng cố định trong đó.
Nếu bạn có một số hữu hạn có độ dài tuple có thể, bạn có thể làm điều này:
prepend(X, {}) -> {X};
prepend(X, {A}) -> {X, A};
prepend(X, {A, B}) -> {X, A, B};
prepend(X, {A, B, C}) -> {X, A, B, C}.
Bạn có thể tiếp tục mô hình này cho tới chừng nào bạn cần.
Chắc chắn, nếu bạn muốn danh sách sử dụng cấu trúc động thay thế. – rvirding
Trường hợp sử dụng thực tế của tôi là tôi có một số hàm trả về các bộ dữ liệu "thô" (ví dụ: '{Name, Age}') và muốn biến chúng thành các bộ dữ liệu được gắn thẻ ('{person, Name, Age}'). Tôi không muốn cấu trúc năng động chút nào. –
là cấu trúc sâu hơn ok cho bạn? như {person, {Name, Age}}? Vì vậy, bạn có thể gọi hàm bằng thẻ này: {person, who (Args)} .. – user425720