คำถามติดแท็ก functional-programming

ฟังก์ชั่นการเขียนโปรแกรมเป็นกระบวนทัศน์การเขียนโปรแกรมซึ่งส่วนใหญ่ใช้ฟังก์ชั่นเป็นวิธีการในการสร้าง abstractions และแสดงการคำนวณที่ประกอบด้วยโปรแกรมคอมพิวเตอร์

6
หมวดหมู่ทฤษฎีมีประโยชน์สำหรับการเรียนรู้การเขียนโปรแกรมการทำงานหรือไม่
ฉันกำลังเรียน Haskell และฉันก็หลงใหลในภาษานี้ อย่างไรก็ตามฉันไม่มีพื้นฐานทางคณิตศาสตร์หรือ CS อย่างจริงจัง แต่ฉันเป็นโปรแกรมเมอร์ซอฟต์แวร์ที่มีประสบการณ์ ฉันต้องการเรียนรู้ทฤษฎีหมวดหมู่เพื่อที่ฉันจะสามารถพัฒนาได้ดีขึ้นที่ Haskell ฉันควรเรียนรู้หัวข้อใดในทฤษฎีหมวดหมู่เพื่อเป็นพื้นฐานที่ดีสำหรับการทำความเข้าใจ Haskell

3
ประเภทที่อ้างถึงเทียบกับประเภทการปรับแต่ง
มีใครอธิบายความแตกต่างระหว่างชนิดพึ่งพาและประเภทการปรับแต่งได้หรือไม่ ตามที่ฉันเข้าใจประเภทการปรับแต่งจะมีค่าทั้งหมดของชนิดที่ทำให้ภาคแสดง มีคุณสมบัติของชนิดพึ่งพาซึ่งแยกแยะพวกเขาหรือไม่ ถ้ามันช่วยได้ฉันเจอประเภทการกลั่นผ่านโครงการ Liquid Haskell และประเภทที่ต้องพึ่งพาผ่าน Coq และ Agda ที่กล่าวว่าฉันกำลังมองหาคำอธิบายว่าทฤษฎีแตกต่างกันอย่างไร

3
ความซับซ้อนของอัลกอริทึมเป็นแบบจำลองสำหรับภาษาที่ใช้งานได้อย่างไร
ความซับซ้อนของอัลกอริทึมได้รับการออกแบบให้ไม่ขึ้นกับรายละเอียดในระดับที่ต่ำกว่า แต่ขึ้นอยู่กับโมเดลที่จำเป็นเช่นการเข้าถึงอาร์เรย์และการแก้ไขโหนดในทรีใช้เวลา O (1) นี่ไม่ใช่กรณีในภาษาที่ใช้งานได้จริง รายการ Haskell ใช้เวลาเชิงเส้นในการเข้าถึง การแก้ไขโหนดในทรีเกี่ยวข้องกับการสร้างสำเนาใหม่ของทรี ควรมีแบบจำลองทางเลือกของความซับซ้อนของอัลกอริทึมสำหรับภาษาที่ใช้งานได้หรือไม่?

3
อะไรคือคำอธิบายสั้น ๆ แต่สมบูรณ์ของระบบประเภท pure / dependent
หากบางสิ่งนั้นเรียบง่ายก็ควรอธิบายให้สมบูรณ์ด้วยคำสองสามคำ สิ่งนี้สามารถทำได้สำหรับ calcul-แคลคูลัส: calcul-แคลคูลัสเป็นไวยากรณ์ไวยากรณ์ (โดยทั่วไปโครงสร้าง) ที่มีกฎการลด (ซึ่งหมายถึงขั้นตอนการค้นหา / แทนที่จะถูกนำไปใช้ซ้ำกับทุกรูปแบบที่เกิดขึ้นเฉพาะจนกว่าจะไม่มีรูปแบบดังกล่าว) ไวยากรณ์: Term = (Term Term) | (λ Var . Term) | Var กฎการลด: ((λ var body) term) -> SUBS(body,var,term) where `SUBS` replaces all occurrences of `var` by `term` in `body`, avoiding name capture. ตัวอย่าง: (λ a . a) -> (λ a …

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

2
แลมบ์ดาแคลคูลัสเป็น syntactic ล้วนๆหรือไม่
ฉันอ่านเกี่ยวกับแลมบ์ดาแคลคูลัสมาสองสามสัปดาห์แล้ว แต่ฉันยังไม่ได้เห็นอะไรที่แตกต่างอย่างมากจากฟังก์ชั่นทางคณิตศาสตร์ที่มีอยู่และฉันต้องการที่จะรู้ว่ามันเป็นเพียงสัญกรณ์หรือไม่ คุณสมบัติหรือกฎที่สร้างขึ้นโดยสัจพจน์แคลคูลัสแลมบ์ดาที่ไม่ได้ใช้กับฟังก์ชันทางคณิตศาสตร์ทุกฟังก์ชัน ตัวอย่างเช่นฉันได้อ่านว่า: "อาจมีฟังก์ชั่นที่ไม่ระบุชื่อ" : ฟังก์ชั่นแลมบ์ดาไม่ระบุชื่อพวกเขาทั้งหมดเรียกว่าแลมบ์ดา อนุญาตให้ใช้ในการคำนวณทางคณิตศาสตร์เพื่อใช้ตัวแปรเดียวกันสำหรับฟังก์ชั่นที่แตกต่างกันหากชื่อไม่สำคัญ ตัวอย่างเช่นทั้งสองฟังก์ชั่นในการเชื่อมต่อ Galois มักจะถูกเรียกว่า * "ฟังก์ชั่นสามารถรับฟังก์ชั่นเป็นอินพุต" : ไม่ใช่เรื่องใหม่ที่คุณสามารถทำได้ด้วยฟังก์ชั่นทั่วไป "ฟังก์ชั่นเป็นกล่องดำ" : เพียงแค่อินพุตและเอาต์พุตก็เป็นคำอธิบายที่ถูกต้องของฟังก์ชันทางคณิตศาสตร์ ... นี่อาจดูเหมือนการอภิปรายหรือคำถามที่มีความเห็น แต่ฉันเชื่อว่าควรมีคำตอบที่ "ถูกต้อง" สำหรับคำถามนี้ ฉันต้องการที่จะรู้ว่าแลมบ์ดาแคลคูลัสเป็นเพียงสัญกรณ์หรือแบบแผนวากยสัมพันธ์สำหรับการทำงานกับฟังก์ชั่นทางคณิตศาสตร์หรือไม่ว่ามีความแตกต่างที่สำคัญหรือความหมายระหว่างแลมบ์ดาและฟังก์ชั่นธรรมดา

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

3
อะไรคือความสัมพันธ์ระหว่างหน้าที่ใน SML และทฤษฎีหมวดหมู่?
ตามความคิดเดียวกันกับคำกล่าวนี้โดยAndrej Bauerในคำตอบนี้ ชุมชน Haskell ได้มีการพัฒนาเทคนิคจำนวนหนึ่งแรงบันดาลใจจากทฤษฎีประเภทที่monadsเป็นที่รู้จักกันดีที่สุด แต่ไม่ควรจะสับสนกับmonads อะไรคือความสัมพันธ์ระหว่างfunctorsใน SML และfunctorsในทฤษฎีหมวดหมู่? เนื่องจากฉันไม่รู้เกี่ยวกับรายละเอียดของฟังก์ชั่นในภาษาอื่นเช่น Haskell หรือ OCaml หากมีข้อมูลที่มีค่ากรุณาเพิ่มหัวข้อสำหรับภาษาอื่นด้วย

2
การแสดงออกของการคำนวณเหมือนกับ monad หรือไม่?
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Computer Science Stack Exchange อพยพ 5 ปีที่ผ่านมา ฉันยังคงเรียนรู้การเขียนโปรแกรมฟังก์ชั่น (ด้วย f #) และฉันเพิ่งเริ่มอ่านเกี่ยวกับนิพจน์การคำนวณ ฉันยังไม่เข้าใจแนวคิดและสิ่งหนึ่งที่ทำให้ฉันไม่แน่ใจเมื่ออ่านบทความทั้งหมดเกี่ยวกับพระ (ส่วนใหญ่เขียนจากฐานของ Haskell) คือความสัมพันธ์ระหว่างนิพจน์การคำนวณกับพระ ต้องเขียนทั้งหมดที่นี่เป็นคำถามของฉัน (จริง ๆ แล้วสองคำถาม): การคำนวณการคำนวณ F # ทุกครั้งเป็น Monad หรือไม่? Monad ทุกคนสามารถแสดงออกด้วยการคำนวณการคำนวณ F # ได้หรือไม่? ฉันได้อ่านนี้โพสต์ของโทมัส Petricek และถ้าผมเข้าใจมันได้ดีก็ระบุว่าการแสดงออกการคำนวณมากกว่า monads แต่ผมไม่แน่ใจว่าถ้าผมแปลความหมายนี้ได้อย่างถูกต้อง

2
ทฤษฎีหมวดหมู่หมายถึงอะไรยังไม่รู้ว่าจะจัดการกับฟังก์ชันที่มีลำดับสูงกว่าได้อย่างไร
ในการอ่านคำตอบของ Uday Reddy ต่อความสัมพันธ์ระหว่างหน้าที่ใน SML กับทฤษฎีหมวดหมู่คืออะไร? รัฐ Uday ทฤษฎีหมวดหมู่ยังไม่ทราบวิธีจัดการกับฟังก์ชั่นที่มีลำดับสูงกว่า สักวันมันจะ เนื่องจากฉันคิดว่าทฤษฎีหมวดหมู่สามารถใช้เป็นรากฐานสำหรับคณิตศาสตร์ได้ดังนั้นจึงควรเป็นไปได้ที่จะได้รับฟังก์ชันคณิตศาสตร์และฟังก์ชันลำดับสูงทั้งหมด ดังนั้นสิ่งที่มีความหมายตามทฤษฎีหมวดหมู่ยังไม่ทราบวิธีการจัดการกับฟังก์ชั่นการสั่งซื้อที่สูงขึ้น? การพิจารณาทฤษฎีหมวดหมู่เป็นพื้นฐานสำหรับคณิตศาสตร์หรือไม่

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

2
ทฤษฎีหมวดหมู่ (ไม่ใช่) สำหรับการเขียนโปรแกรม?
หลังจากเรียนรู้ Haskell และภาษา FP อื่น ๆ ที่ไม่บริสุทธิ์ฉันก็ตัดสินใจอ่านเกี่ยวกับทฤษฎีหมวดหมู่ หลังจากได้รับความเข้าใจที่ดีเกี่ยวกับทฤษฎีหมวดฉันเริ่มคิดเกี่ยวกับแนวคิดของทฤษฎีหมวดหมู่ที่สามารถใช้ในการคิดเกี่ยวกับการออกแบบโปรแกรมแต่ไม่ว่าฉันจะพยายามอย่างหนักเพียงใดดูเหมือนว่านี่ไม่ใช่วิธีที่จะไป หลังจากใช้ความพยายามไม่สำเร็จหลายครั้งเพื่อเชื่อมโยงทฤษฎีหมวดหมู่กับโปรแกรมการออกแบบฉันได้ข้อสรุปว่า: หมวดหมู่ทฤษฎีจะเป็นประโยชน์เมื่อการออกแบบภาษาการเขียนโปรแกรม ทฤษฎีหมวดหมู่ไม่ใช่สิ่งที่คุณใช้เมื่อออกแบบโปรแกรม (แม้เมื่อใช้ภาษาที่ได้รับการออกแบบตามหลักการหมวดหมู่) ตัวอย่างเช่น: เมื่อการเขียนโปรแกรมใน Haskell คุณจะใช้ชนิดตัวสร้างประเภทฟังก์ชั่นฟังก์ชั่นการสั่งซื้อที่สูงขึ้น ฯลฯ เพื่อออกแบบโปรแกรมของคุณไม่ใช่แนวคิดทฤษฎีหมวดหมู่ โดยสรุปเรามีระบบเลเยอร์ด้านล่าง (คำสั่งซื้อต่ำถึงสูง): หมวดหมู่ทฤษฎี -> ภาษาการเขียนโปรแกรม -> โปรแกรม ที่ชั้นโดยเฉพาะอย่างยิ่งคุณใช้แนวคิดของชั้นพื้นฐานทันที ความเข้าใจนี้ถูกต้องหรือไม่ ถ้าไม่ใช่และคุณเชื่อว่าในการออกแบบโปรแกรมเราสามารถใช้แนวคิดทฤษฎีหมวดหมู่ได้โดยตรงโปรดอ้างอิงบทความหรือบทความในบล็อกที่แสดงให้เห็น หมายเหตุ: โดยการออกแบบโปรแกรมฉันหมายถึงการออกแบบโปรแกรมตามแนวคิดที่แตกต่างกันเช่นการทำงานพร้อมกัน, การขนาน, ปฏิกิริยา, การส่งข้อความเป็นต้น

5
แลมบ์ดาแคลคูลัสนอกการเขียนโปรแกรมการทำงาน
คำถามนี้ถูกย้ายจาก Theoretical Computer Science Exchange Exchange เนื่องจากสามารถตอบได้ใน Computer Science Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันเป็นนักศึกษามหาวิทยาลัยและตอนนี้เรากำลังศึกษาแลมบ์ดาแคลคูลัส อย่างไรก็ตามฉันยังคงมีเวลาเข้าใจยากว่าทำไมสิ่งนี้มีประโยชน์สำหรับฉัน ฉันรู้ว่าถ้าคุณเขียนโปรแกรมฟังก์ชั่นมากมายมันอาจจะมีประโยชน์ แต่ฉันคิดว่ามันไม่จำเป็นสำหรับการเรียนรู้การเขียนโปรแกรมฟังก์ชั่นคุณคิดอย่างไร? ประการที่สองมีการใช้แลมบ์ดาแคลคูลัสในขอบเขตของวิทยาศาสตร์คอมพิวเตอร์ แต่นอกเหนือจากภาษาโปรแกรมที่ใช้งานได้หรือไม่?

1
เหตุใดการเขียนโปรแกรมแบบไม่ทำงานจึงค้นคว้าต้นไม้แบบไดนามิก
ต้นไม้ไดนามิกมีบทบาทสำคัญในการแก้ปัญหาต่าง ๆ เช่นการไหลของเครือข่ายกราฟไดนามิกปัญหา combinatorial ("Dynamic Trees in Practice" โดย Tarjan และ Werneck) และเมื่อเร็ว ๆ นี้ได้รวมพจนานุกรม ("A Mergeable Dictionary" โดย Adam Karczmarz) โดยต้นไม้ไดนามิกฉันอ้างถึงคำจำกัดความที่ระบุไว้ในกระดาษของ Sleator & Tarjan "โครงสร้างข้อมูลสำหรับต้นไม้ไดนามิก" ในปี 1983 ความพยายามน้อยได้รับการเผยแพร่ภายในขอบเขตการวิจัยการเขียนโปรแกรมการทำงานตั้งแต่ เอ็ดเวิร์ด Kmett ดำเนินการรุ่นของต้นไม้ ST ส่วนใหญ่เป็นคำแปลของภาษา C ++ คู่ให้ดูต้นไม้ Link-ตัด Chris Okasaki เขียนการนำต้นไม้ Splay ไปใช้อย่าง จำกัด ในหนังสือที่โด่งดังของเขา Ralf Hinze และ Ross Paterson …

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.