ฟังก์ชั่นการจัดเรียงของ Haskell เป็นตัวอย่างของรูปแบบสถาปัตยกรรมของตัวกรองและตัวกรอง


9

ท่อและกรองรูปแบบสถาปัตยกรรมที่ถูกกำหนดให้เป็นห่วงโซ่ขององค์ประกอบการประมวลผลจัดเพื่อให้การส่งออกของแต่ละองค์ประกอบคือการป้อนข้อมูลต่อไป ทุกตัวอย่างดูเหมือนจะพิจารณาการเชื่อมต่อระหว่างกระบวนการหรือระหว่างเธรดที่ดำเนินการผ่านบัฟเฟอร์ที่ใช้ร่วมกันบางประเภท

สำหรับฉันดูเหมือนว่าองค์ประกอบของฟังก์ชัน Haskellกำลังทำงานเหมือนเดิม เราสามารถพูดได้ไหมว่ามันเป็นตัวอย่างของรูปแบบนี้แม้ว่ามันจะเป็นเพียงแค่การจัดลำดับฟังก์ชั่นและไม่มีการใช้บัฟเฟอร์อย่างชัดเจนเป็นไพพ์ ถ้าใช่เราสามารถพูดสิ่งเดียวกันสำหรับภาษาที่ไม่ขี้เกียจได้หรือไม่?

คำตอบ:


8

พวกเขาเชื่อมต่อ แต่การเชื่อมต่อเป็นวิธีอื่น ๆ (เรียงลำดับ)

องค์ประกอบของมอร์ฟิซึ่มในหมวดหมู่ที่เหมาะสมอย่างแม่นยำทั้งฟังก์ชั่นองค์ประกอบ (ที่หมวดหมู่Setสำหรับภาษาที่เข้มงวดและภาษาCPOสันหลังยาว) และองค์ประกอบกระบวนการ (ที่หมวดหมู่คือ (AFAIK, ไม่มีชื่อ) หมวดหมู่ที่วัตถุเป็นสตริง morphisms เป็นเปลือก กระบวนการและองค์ประกอบคือผู้ประกอบการท่อ) กระบวนการเชลล์สามารถมองเห็นได้โดยไม่สูญเสียทั้งทั่วไปหรือความถูกต้องเป็น (ขี้เกียจ) ฟังก์ชั่นประเภทString -> WriterT String IO Stringและฟังก์ชั่นบริสุทธิ์จากประเภทนี้String -> Stringสามารถแปลง losslessly ไปและกลับจากฟังก์ชั่นประเภทString -> Identity Stringเพื่อให้ทั้งสองมีความจริงเพียง(>>=)ในการปลอมตัว


1
คืออะไรCPOหมวดหมู่? google-fu ของฉันอ่อนแอ :(
Andres F.

3
@AndresF ประเภทของComplete Partial Orders
เปลวไฟของ Ptharien

2

มีความแตกต่าง ท่อและตัวกรองจัดการกับการเชื่อมต่อข้อมูลและข้อมูลในขณะที่ Haskell Function Composition เกี่ยวข้องกับฟังก์ชันชั้นหนึ่ง ฟังก์ชั่นชั้นหนึ่งประกอบได้ในรูปแบบที่ท่อและตัวกรองไม่ได้เป็น

การอ่านเพิ่มเติมการ
เรียบเรียงความหมายในบริบทของการโปรแกรมเชิงฟังก์ชันคืออะไร


1
การประพันธ์ไม่จำเป็นต้องเกี่ยวข้องกับฟังก์ชั่นชั้นหนึ่งมากนักเนื่องจากการประพันธ์นั้นเป็นฟังก์ชั่นชั้นหนึ่ง Take เช่นองค์ประกอบของฟังก์ชั่น++ที่เป็นองค์ประกอบ., ++ . ++จะใช้เวลาคุ้มค่าและกลับค่าที่เพิ่มขึ้นสองครั้ง แต่++ไม่ได้เป็นฟังก์ชั่นชั้นแรกจะใช้เวลาเพียงค่าและผลตอบแทนที่มีค่า ฟังก์ชั่นการประกอบเป็นฟังก์ชั่นชั้นหนึ่งซึ่งใช้เวลาสองฟังก์ชั่นและส่งกลับหนึ่ง
จิมมี่ฮอฟฟา

1
@JimmyHoffa ฉันคิดว่าคุณสับสนแนวคิดของ 'ฟังก์ชั่นชั้นหนึ่ง' ด้วย 'ฟังก์ชั่นที่สูงกว่า' เมื่อภาษามี 'ฟังก์ชั่นชั้นหนึ่ง' มันจะทำหน้าที่ของฟังก์ชั่นเช่นเดียวกับที่ใช้กับประเภทข้อมูลชั้นหนึ่งอื่น ๆ พวกเขาสามารถส่งผ่านไปและกลับจากฟังก์ชั่นที่เก็บไว้ในโครงสร้างข้อมูล ฯลฯ ฟังก์ชั่นที่สูงขึ้นใช้ประโยชน์จากลักษณะชั้นหนึ่งของฟังก์ชั่นโดยการใช้พารามิเตอร์ฟังก์ชั่นและ / หรือกลับค่าฟังก์ชั่น
Levi Pearson

@ LeviPearson ใช่ฉันต้องเผลอใส่สมองของฉันไปด้านข้างเมื่อฉันตื่นนอนตอนเช้าฉันเขียนความคิดเห็นนั้น หากคุณกำลังจะพูดพล่ามรอบที่นี่เขียนเนื้อหาที่ดีสำหรับ P.SE, ไตร่ตรองไม่ทำงานในการสนทนาทั่วไปของ P.SEs
จิมมี่ฮอฟฟา
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.