ฉันทราบดีว่าการพับซ้ายทำให้เกิดต้นไม้ที่เอนไปทางซ้ายและการพับขวาทำให้เกิดต้นไม้ที่เอนไปทางขวา แต่เมื่อฉันเอื้อมไปพับบางครั้งฉันก็พบว่าตัวเองจมอยู่กับความคิดที่ทำให้ปวดหัวโดยพยายามหาว่าพับแบบไหน มีความเหมาะสม ฉันมักจะจบลงด้วยการคลี่คลายปัญหาทั้งหมดและก้าวผ่านการใช้งานฟังก์ชั่นพับตามที่มันใช้กับปัญหาของฉัน
สิ่งที่ฉันอยากรู้คือ:
- มีกฎอะไรบ้างในการพิจารณาว่าจะพับซ้ายหรือพับขวา?
- ฉันจะตัดสินใจได้อย่างไรว่าจะใช้การพับแบบใดในขณะที่ประสบปัญหา
มีตัวอย่างในScala ตามตัวอย่าง (PDF) ของการใช้การพับเพื่อเขียนฟังก์ชันที่เรียกว่าแฟลทเทนซึ่งเชื่อมรายการองค์ประกอบเข้าด้วยกันเป็นรายการเดียว ในกรณีนั้นการพับด้านขวาเป็นทางเลือกที่เหมาะสม (โดยพิจารณาจากวิธีการต่อรายการ) แต่ฉันต้องคิดสักหน่อยกว่าจะได้ข้อสรุปนั้น
เนื่องจากการพับเป็นการกระทำทั่วไปในการเขียนโปรแกรม (ฟังก์ชัน) ฉันจึงต้องการตัดสินใจประเภทนี้ได้อย่างรวดเร็วและมั่นใจ มีเคล็ดลับอย่างไร