2015-06-21 14 views
6

Tôi đang học Erlang từ Learn You Some Erlang và tôi đã thấy mẫu [_|_] hai lần nhưng không thể tìm thấy bất kỳ thông tin nào trên đó. Cách sử dụng này có vẻ thừa thãi vì bỏ qua nó từ (1) và trừ nó với _ trong (2) mang lại kết quả tương tự mà không làm giảm khả năng đọc. Đây là tuần đầu tiên của tôi với Erlang vì vậy tôi có thể hoàn toàn sai.Mẫu [_ | _] trong Erlang có ý nghĩa gì không?

(1) từ bestest_qsort:

bestest_qsort(L=[_|_]) -> 
    bestest_qsort(L, []). 

(2) từ here:

error:{badmatch,[_|_]} -> ok 

Trả lời

11

Các mô hình [p1 | p2] phù hợp với một danh sách không có sản phẩm nào, mà người đứng đầu phù hợp với mô hình p1 và có trận đấu đuôi mẫu p2. Vì vậy, kể từ khi mô hình _ khớp với mọi thứ, [_ | _] khớp với bất kỳ danh sách không trống nào. Mặt khác,

_ Mặt khác khớp với bất kỳ thứ gì, kể cả danh sách trống.

+5

@toraritte Thử 'F ([2,3])'. Mẫu '[p]' khớp với một danh sách chứa chính xác một phần tử, khớp với 'p'. Nó không khớp với các danh sách có nhiều hơn một phần tử (nếu không, nói, '[1,2]' sẽ khớp với mẫu '[1]', điều này không có ý nghĩa - '[1] = [1,2]' phải rõ ràng không khớp). – sepp2k

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