Sử dụng Γ
Việc sử dụng chính của tích hợp Γ, được gọi là khớp mẫu trong danh sách hoặc giải cấu trúc danh sách , là chia danh sách thành phần đầu và đuôi và áp dụng hàm nhị phân trên chúng. Điều này tương ứng với thành ngữ Haskell phù hợp với thành ngữ
f (x : xs) = <something>
f [] = <something else>
trong đó <something>một biểu thức có chứa x, xsvà có thể f. Có 4 quá tải Γ, mỗi cái hoạt động khác nhau một chút.
list
Quá tải đầu tiên list, có một giá trị avà hàm nhị phân f. Nó trả về một chức năng mới có một danh sách, trả về anếu nó trống và gọi fvào đầu và đuôi nếu nó không trống. Ví dụ: Γ_1€lấy một danh sách, trả về -1nếu nó trống và chỉ mục xuất hiện đầu tiên của phần tử đầu tiên ở đuôi nếu không.
listN
Quá tải thứ hai, listNtương tự như list, ngoại trừ ađược bỏ qua và giá trị mặc định của loại trả về được sử dụng thay thế. Ví dụ, Γ€tương đương với Γ0€, vì giá trị số mặc định là 0.
Trong thực tế, listNđược sử dụng thường xuyên hơn list, vì giá trị mặc định là không liên quan hoặc chính xác những gì bạn cần. Một mô hình phổ biến là Γ~αβγ, nơi αβγcó ba chức năng; điều này áp dụng βcho phần tử đầu tiên và γphần đuôi, và kết hợp các kết quả với α. Nó đã được sử dụng ví dụ trong câu trả lời này . Các mẫu khác bao gồm chỉ Γo:αáp dụng αcho phần tử đầu tiên và Γ·:mαđể áp dụng αcho tất cả các phần tử ngoại trừ phần tử đầu tiên. Thứ hai đã được sử dụng trong câu trả lời này .
listF
Quá tải thứ ba là một chút liên quan. Giống như list, nó nhận một giá trị avà một hàm fvà trả về một hàm mới gcó một danh sách. Tuy nhiên, lần này fcó một đối số hàm bổ sung, gchính nó và có thể gọi nó trên bất kỳ giá trị nào (bao gồm, nhưng không giới hạn ở phần đuôi của danh sách đầu vào). Điều này có nghĩa là listFthực hiện một sơ đồ đệ quy chung trong danh sách.
listFkhông được sử dụng rất thường xuyên, vì đệ quy rõ ràng với list/ listNthường có cùng độ dài hoặc ngắn hơn, như trong câu trả lời này .
listNF
listNFlà listFnhững gì listNlà list: đầu vào ađược bỏ qua, và giá trị mặc định của kiểu trả về được sử dụng để thay thế. Trong trường hợp hiếm hoi, nó có thể ngắn hơn một nếp gấp bên phải, ví dụ trong câu trả lời này .
Như một ví dụ về các phiên bản đệ quy của Γ, hàm này Γλ·:o⁰↔xáo trộn một danh sách theo thứ tự đầu tiên, cuối cùng, thứ hai, thứ hai đến cuối cùng, thứ ba, thứ ba đến cuối cùng, v.v.
Hãy thử trực tuyến!
Hàm fnày là lambda rõ ràng λ·:o⁰↔, có đối số ⁰là toàn bộ hàm. Điều gì flàm là đảo ngược đuôi với ↔, sau đó gọi hàm chính theo cách đệ quy với o⁰, và cuối cùng giải quyết đầu trở lại với ·:. Tất nhiên, Γ·:o₀↔là một byte ngắn hơn, nhưng không hoạt động nếu dòng chứa thứ gì khác ngoài chức năng này.