เนื่องจากไม่มีวิธีที่ชัดเจนในการทำให้หางสมบูรณ์ ตัวเลือกใด ๆ เกี่ยวกับวิธีการทำมันจะส่งผลให้หางไม่ชัดเจน
เคล็ดลับคือการยืดรายการที่สั้นที่สุดของคุณให้ตรงกับความยาวของรายการที่ยาวที่สุดกับค่าที่คุณคาดไว้
หากซิปทำอย่างนั้นกับคุณคุณไม่สามารถรู้ได้ว่าค่าอะไรที่เติมเข้ามาโดยสัญชาตญาณ มันวนรอบรายการหรือไม่? มันทำซ้ำค่า mempty หรือไม่? ค่า mempty สำหรับประเภทของคุณคืออะไร
ไม่มีความหมายอะไรในสิ่งที่ zip ใช้ในการหยั่งรู้ทางหางจะยาวดังนั้นสิ่งเดียวที่สมเหตุสมผลที่ต้องทำคือทำงานกับค่าที่มีอยู่แทนที่จะทำให้ผู้บริโภคของคุณไม่คาดคิด
นอกจากนี้โปรดจำไว้ว่าคุณหมายถึงฟังก์ชั่นที่รู้จักกันดีโดยเฉพาะที่มีความหมายที่รู้จักกันดี แต่นั่นไม่ได้หมายความว่าคุณไม่สามารถทำหน้าที่คล้ายกัน แต่แตกต่างกันเล็กน้อย เพียงเพราะมีฟังก์ชั่นทั่วไปที่ไม่xไม่ได้หมายความว่าคุณไม่สามารถตัดสินใจเพื่อวัตถุประสงค์ให้คุณที่คุณต้องการจะทำและxy
แม้ว่าจะจำได้ว่าเหตุผลนี้และฟังก์ชั่นสไตล์ FP ทั่วไปอื่น ๆ นั้นเป็นเรื่องธรรมดา แต่เป็นเพราะมันง่ายและทั่วไปเพื่อให้คุณสามารถปรับแต่งโค้ดเพื่อใช้งานและรับพฤติกรรมที่คุณต้องการ ตัวอย่างเช่นใน C # คุณสามารถทำได้
IEnumerable<Tuple<T, U>> ZipDefaults(IEnumerable<T> first, IEnumerable<U> second)
{
return first.Count() < second.Count()
? first.Concat(Enumerable.Repeat(default(T), second.Count() - first.Count())).Zip(second)
: first.Zip(second.Concat(Enumerable.Repeat(default(U), first.Count() - second.count())))
}
หรือเรื่องง่าย ๆ วิธีการของ FP ทำให้การปรับเปลี่ยนนั้นง่ายมากเพราะคุณสามารถนำชิ้นส่วนต่างๆมาใช้ใหม่ได้รวมถึงการนำไปใช้งานมีขนาดเล็กดังที่กล่าวไว้ข้างต้นว่าการสร้างสิ่งต่าง ๆ ที่ดัดแปลงของคุณเองนั้นง่ายมาก