Cuốn sách tôi đang đọc về Erlang có bài tập ở mặt sau của nó và một là để tái tạo danh sách: nối thêm chức năng.Làm thế nào tôi có thể viết danh sách của Erlang nối mà không sử dụng mô-đun danh sách?
Tôi có thể làm điều này chỉ đơn giản bằng cách sử dụng toán tử ++, nhưng điều này có thực sự chậm không? Và tôi nghĩ rằng điểm của bài tập là làm điều đó bằng cách sử dụng các hoạt động danh sách mà tôi viết.
Cho đến nay phương pháp duy nhất mà tôi có thể nghĩ là để làm một cái gì đó như:
concat([], _, Results)->
Results;
concat(_, [], Results)->
Results;
concat([Ah|At],B,Results) ->
concat(At,B,[Ah|Results]).
Nhưng tôi biết điều này là không chính xác ...
Bất kỳ đề xuất về cách đi về việc này?
EDIT: Để làm rõ câu hỏi, đây là một ví dụ đầu vào và đầu ra:
Input: [[1,2,3], [], [4,5], [6]] Output: [1,2,3,4,5,6]
Sau khi làm việc một thời gian, tôi đã đưa ra với mã này cũng như:
append([A|[B|[T|[]]]]) ->
append([A++B|T]);
append([H|T]) ->
H++T.
Tuy nhiên, điều này chỉ làm việc cho khi danh sách là kích thước 3 Làm thế nào tôi có thể sửa đổi điều này để nó hoạt động cho bất kỳ số tiền nhất định của danh sách kích thước ngẫu nhiên?
tôi không sử dụng Erlang, nhưng tôi không thể tưởng tượng rằng 'danh sách: append' là bất kỳ nhanh hơn so với' + + '(Tôi nghĩ rằng đó là O (n) không có vấn đề làm thế nào bạn làm điều đó). – Zifre
'danh sách: append' _is_' ++ '. –
Nhưng ++ có thể không hiệu quả nếu toán hạng trái của nó lớn hơn toán hạng bên phải của nó. Hình phạt hiệu suất này cũng có xảy ra với các danh sách: nối thêm không? – samoz