การใช้ประโยชน์จาก Γ
การใช้งานหลักของ built-in Γหรือที่เรียกว่าการจับคู่รูปแบบในรายการหรือโครงสร้างรายการคือการแบ่งรายการออกเป็นส่วนหัวและส่วนท้ายและใช้ฟังก์ชันไบนารีกับพวกเขา สิ่งนี้สอดคล้องกับสำนวนรูปแบบการจับคู่ Haskell
f (x : xs) = <something>
f [] = <something else>
ที่<something>อยู่ในการแสดงออกที่มีx, และอาจxs fมีการบรรทุกเกินพิกัด 4 รายการΓซึ่งแต่ละชุดทำงานแตกต่างกันเล็กน้อย
list
มากไปครั้งแรกlistจะใช้เวลาคุ้มค่าและฟังก์ชั่นแบบไบนารีa fส่งคืนฟังก์ชันใหม่ที่รับรายการส่งคืนaหากไม่มีข้อมูลและเรียกfใช้หัวและส่วนท้ายหากไม่มีข้อมูล ตัวอย่างเช่นΓ_1€รับรายการส่งคืน-1ถ้ามันว่างเปล่าและดัชนีการเกิดขึ้นครั้งแรกขององค์ประกอบแรกในหางถ้าไม่
listN
การบรรทุกเกินพิกัดครั้งที่สองlistNคล้ายกับlistยกเว้นว่าaถูกละเว้นและใช้ค่าเริ่มต้นของประเภทส่งคืนแทน ยกตัวอย่างเช่นΓ€เทียบเท่ากับตั้งแต่ค่าตัวเลขเริ่มต้นคือΓ0€0
ในทางปฏิบัติlistNมีการใช้บ่อยกว่าlistเนื่องจากค่าเริ่มต้นไม่เกี่ยวข้องหรือเป็นสิ่งที่คุณต้องการ รูปแบบทั่วไปคือΓ~αβγโดยที่αβγมีสามฟังก์ชัน นี้βไปยังองค์ประกอบแรกและหางและรวมผลกับγ αมันถูกใช้เช่นในคำตอบนี้ รูปแบบอื่น ๆ รวมถึงΓo:αการใช้αกับองค์ประกอบแรกเท่านั้นและΓ·:mαใช้αกับองค์ประกอบทั้งหมดยกเว้นรายการแรก หลังถูกใช้ในคำตอบนี้
listF
การบรรทุกเกินพิกัดครั้งที่สามนั้นเกี่ยวข้องกับอีกเล็กน้อย เช่นเดียวกับlistมันใช้ค่าaและฟังก์ชั่นfและส่งกลับฟังก์ชั่นใหม่gที่ใช้รายการ อย่างไรก็ตามเวลานี้fใช้อาร์กิวเมนต์ของฟังก์ชันพิเศษซึ่งเป็นgตัวเองและสามารถเรียกมันได้บนค่าใด ๆ (รวมถึง แต่ไม่ จำกัด เฉพาะที่ส่วนท้ายของรายการอินพุต) ซึ่งหมายความว่าlistFใช้รูปแบบการเรียกซ้ำทั่วไปในรายการ
listFไม่ได้ใช้บ่อยนักเนื่องจากการเรียกซ้ำโดยชัดเจนด้วยlist/ listNมักจะมีความยาวเท่ากันหรือสั้นกว่าดังที่คำตอบนี้
listNF
listNFคือlistFอะไรlistNคือlist: อินพุตaถูกละเว้นและใช้ค่าดีฟอลต์ของชนิดส่งคืนแทน ในสถานการณ์ที่หายากมันอาจสั้นกว่าครึ่งทางขวาตัวอย่างเช่นในคำตอบนี้
เป็นตัวอย่างของเวอร์ชันที่เรียกซ้ำได้Γฟังก์ชันจะΓλ·:o⁰↔สลับรายการตามลำดับก่อน, สุดท้าย, วินาที, วินาที, สองไปจนถึงสุดท้าย, สาม, สามต่อจากนี้และต่อไปเรื่อย ๆ
ลองออนไลน์!
ฟังก์ชั่นfเป็นแลมบ์ดาที่ชัดเจนλ·:o⁰↔ซึ่งอาร์กิวเมนต์⁰เป็นฟังก์ชั่นทั้งหมด สิ่งที่fไม่สามารถย้อนกลับหางด้วย↔แล้วเรียกใช้ฟังก์ชันหลักซ้ำด้วยและในที่สุดก็ตรึงกลับหัวด้วยo⁰ ·:แน่นอนว่าΓ·:o₀↔เป็นไบต์ที่สั้นกว่า แต่ไม่สามารถใช้งานได้หากบรรทัดนั้นมีสิ่งอื่นนอกเหนือจากฟังก์ชั่นนี้