Từ một tổ hợp quan điểm thực tế là loại cấu trúc lập trình cho phép bạn kết hợp các phần logic trong cách cư xử thú vị và thường tiên tiến. Thông thường sử dụng chúng phụ thuộc vào khả năng có thể đóng gói mã thực thi vào các đối tượng, thường được gọi là (vì lý do lịch sử) các hàm lambda hoặc biểu thức lambda, nhưng số dặm của bạn có thể thay đổi.
Một ví dụ đơn giản về bộ kết hợp (hữu ích) là một hàm có hai hàm lambda không có tham số và tạo một hàm mới chạy chúng theo thứ tự. Bộ kết hợp thực tế nhìn vào mã giả chung như thế này:
func in_sequence(first, second):
lambda ():
first()
second()
Điều cốt yếu làm cho điều này trở thành một tổ hợp là hàm ẩn danh (hàm lambda) trên dòng thứ hai; khi bạn gọi
a = in_sequence(f, g)
đối tượng kết quả a không phải là kết quả của việc chạy f () đầu tiên và sau đó là g (), nhưng nó là một đối tượng mà bạn có thể gọi sau để thực hiện f () và g () theo thứ tự:
a() // a is a callable object, i.e. a function without parameters
Tương tự như vậy, bạn có thể có một tổ hợp chạy song song hai khối mã:
func in_parallel(first, second):
lambda ():
t1 = start_thread(first)
t2 = start_thread(second)
wait(t1)
wait(t2)
Và sau đó một lần nữa,
a = in_parallel(f, g)
a()
Điều thú vị là 'in_pool' và 'in_ resultence' đều là các tổ hợp có cùng loại / chữ ký, tức là cả hai đều lấy hai đối tượng hàm không tham số và trả về một đối tượng hàm mới. Bạn thực sự có thể viết những thứ như
a = in_sequence(in_parallel(f, g), in_parallel(h, i))
và nó hoạt động như mong đợi.
Về cơ bản, các tổ hợp cho phép bạn xây dựng luồng điều khiển của chương trình (trong số những thứ khác) theo cách thức thủ tục và linh hoạt. Ví dụ: nếu bạn sử dụng bộ kết hợp in_pool (..) để chạy song song trong chương trình của mình, bạn có thể thêm gỡ lỗi liên quan đến việc đó để thực hiện chính trình kết hợp in_pool. Sau này, nếu bạn nghi ngờ rằng chương trình của bạn có lỗi liên quan đến song song, bạn thực sự có thể thực hiện lại in_pool:
in_parallel(first, second):
in_sequence(first, second)
và với một nét, tất cả các phần song song đã được chuyển đổi thành các phần tiếp theo!
Kết hợp rất hữu ích khi sử dụng đúng.
Bộ kết hợp Y, tuy nhiên, không cần thiết trong cuộc sống thực. Nó là một bộ kết hợp cho phép bạn tạo các hàm tự đệ quy và bạn có thể tạo chúng dễ dàng bằng bất kỳ ngôn ngữ hiện đại nào mà không cần bộ kết hợp Y.