การใช้ประโยชน์จาก Γ
การใช้งานหลักของ 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₀↔
เป็นไบต์ที่สั้นกว่า แต่ไม่สามารถใช้งานได้หากบรรทัดนั้นมีสิ่งอื่นนอกเหนือจากฟังก์ชั่นนี้