2011-11-28 46 views
9

Tôi đang trải qua "Lập trình Pragmatic Erlang", nơi có một chức năng được xác định như thế này:Erlang: kết hợp mẫu nào hiệu quả hơn (danh sách)?

split("\r\n\r\n" ++ T, L) -> {reverse(L), T}; 
split([H|T], L) -> split(T, [H|L]); 
split([], _) -> more. 

lợi ích gì cho tôi là trận đấu đầu tiên, cụ thể là "\r\n\r\n" ++ T - là có sự khác biệt về hiệu năng giữa một mô hình như vậy và một tương tự, mà tôi đã đưa ra: [13,10,13,10|T]? Hay chúng tương đương?

Tôi biết câu hỏi rất đơn giản và tôi có thể (có thể) tự kiểm tra, nhưng nếu có sự khác biệt, tôi muốn biết tại sao lại như vậy.

Cảm ơn!

Trả lời

8

"\r\n\r\n" ++ T chỉ là đường cú pháp cho [13,10,13,10|T]. Nó sẽ thực hiện tương tự. Nếu không có gì đó sai ,-)

+0

Tôi nghĩ có lẽ 'L1 ++ L2' là khác nhau, bởi vì tôi không thể tìm cách chuyển nó thành' cons'es khi được sử dụng như thế: 'T ++ "\ r \ n" '- nhưng nhờ câu trả lời của bạn, tôi lại nghĩ và tôi nhận ra rằng điều đó là có thể, mặc dù hơi dài. Cảm ơn! – cji

+0

'T ++" \ r \ n "' không thể chuyển đổi sang giao điểm sao cho không thể sử dụng trong đối sánh mẫu. –

Các vấn đề liên quan