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

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

7
ภาษาการเขียนโปรแกรมฟังก์ชั่นที่บริสุทธิ์ที่สุด? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันสนใจที่จะเรียนรู้การเขียนโปรแกรมการทำงานที่ดีขึ้น หากต้องการทำเช่นนั้นดูเหมือนว่าฉันควรบังคับให้ตัวเองใช้ภาษาการเขียนโปรแกรมที่ใช้งานได้จริงที่สุด ดังนั้นฉันมาที่นี่เพื่อขอมากหรือน้อยสำหรับการสั่งซื้อภาษาการเขียนโปรแกรมการทำงานตามความบริสุทธิ์ของพวกเขา ฉันคิดว่ามันจะเป็นประโยชน์มากกว่าที่จะเรียนรู้ Lisp หรือ Clojure (หรือ Scheme หรือ Scala ฯลฯ ) แต่สำหรับสิ่งที่ฉันได้ยินเมื่อเร็ว ๆ นี้ Haskell จะยากมากที่จะเอาชนะการสอนหลักการทำงานของโปรแกรมให้กับบางคน ฉันยังไม่แน่ใจเกี่ยวกับเรื่องนี้ดังนั้นฉันขอให้คุณ:ซึ่งเป็นภาษาการเขียนโปรแกรมการทำงานที่บริสุทธิ์ที่สุด? การเรียงลำดับจะดีมากหากหลาย ๆ คนกำลังแข่งขันกันเพื่อชื่ออันงดงามของภาษาการเขียนโปรแกรมที่ใช้งานได้จริง

4
ทำไมบทเรียนการเขียนโปรแกรมการทำงานทั้งหมดจึงเป็นคณิตศาสตร์?
ฉันพยายามเรียนรู้การเขียนโปรแกรมการใช้งานและแบบฝึกหัดส่วนใหญ่ฉันพบว่าใช้คณิตศาสตร์เป็นตัวอย่างสำหรับการสร้างที่ซับซ้อนมากขึ้น (แม้จะง่าย ๆ ในบางกรณี) ทำไมนี้ ฉันคิดว่าจะสามารถใช้บางสิ่งได้ง่ายขึ้น มันทำให้ยากต่อการเรียนรู้ ข้อมูลพื้นฐาน: ฉันเขียนซอฟต์แวร์มา 12 ปีแล้ว ฉันเข้าใจแนวคิดบางอย่างเช่นการปิดการทำงานเป็นพลเมืองชั้นหนึ่งและชื่อสามัญ ฉันอาจจะมีปัญหากับฟังก์ชั่นการสั่งซื้อขั้นสูงในบางระดับขั้นสูง แต่ฉันอยากจะเชื่อว่าฉันมีความเข้าใจพื้นฐาน Monads กำลังกัดฉันในก้นและ ณ จุดนี้ฉันไม่ได้ผ่านที่ (ฉันแน่ใจว่าฉันจะในที่สุดเพราะฉันขัดขืน)

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

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

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

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

7
อะไรคือโครงการการเขียนโปรแกรมฟังก์ชั่นแรกที่ดี? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน8 ปีที่ผ่านมา อะไรคือโครงการการเขียนโปรแกรมฟังก์ชั่นแรกที่ดี? ฉันกำลังมองหาที่จะจบด้วยปังในโครงการปริญญาตรีของฉันและฉันต้องการที่จะจบด้วยโครงการการเขียนโปรแกรมการทำงาน เราไม่ได้เรียนในโรงเรียน แต่เราได้รับการสนับสนุนให้พยายามเรียนรู้สิ่งใหม่ ๆ ด้วยตัวเองและฉันคิดว่าการเรียนรู้กระบวนทัศน์ใหม่ไม่เพียง แต่ภาษาใหม่จะเป็นแบบฝึกหัดที่ยอดเยี่ยมสำหรับฉันและอาจเป็นสิ่งที่น่าสนใจสำหรับครู . ปัญหาคือฉันต้องการเริ่มก่อนเวลาเล็กน้อยในโครงการของฉันเพื่อใช้ประโยชน์จากวันหยุดฤดูร้อนและทำความเข้าใจเกี่ยวกับการเขียนโปรแกรมการทำงานและทำความคุ้นเคยกับภาษาเดียว สิ่งที่คุณจะพูดว่าเป็นโครงการฝึกหัดที่ดีที่ท้าทายนิดหน่อย แต่ยังช่วยให้ฉันเรียนรู้ภาษากระบวนทัศน์เป็นต้นแล้วคุณคิดว่าโครงการดี (เป็นโครงการขั้นสูง) สำหรับโครงการปริญญาตรีของฉันคืออะไร ข้อเสนอแนะสำหรับภาษาที่ดีที่สุดที่จะเริ่มต้นเมื่อเข้าสู่การเขียนโปรแกรมการทำงานจะได้รับการชื่นชมเช่นกัน

3
ชนิดของข้อมูลเกี่ยวกับพีชคณิตแก้ปัญหาอะไร?
คำเตือนอย่างเป็นธรรมฉันยังใหม่กับการเขียนโปรแกรมที่ใช้งานได้ดังนั้นฉันอาจมีข้อสันนิษฐานที่ไม่ดีมากมาย ฉันได้เรียนรู้เกี่ยวกับประเภทพีชคณิต ดูเหมือนว่าจะมีภาษาที่ใช้งานได้หลายภาษาและเป็นประโยชน์อย่างมากเมื่อใช้ร่วมกับการจับคู่รูปแบบ อย่างไรก็ตามพวกเขาแก้ปัญหาอะไรได้จริง? ฉันสามารถใช้ประเภทพีชคณิตที่ดูเหมือน (เรียงลำดับของ) ใน C # เช่นนี้ public abstract class Option { } public class None : Option { } public class Some<T> : Option { public T Value { get; set; } } var result = GetSomeValue(); if(result is None) { } else { } แต่ฉันคิดว่าส่วนใหญ่จะเห็นด้วยว่านี่เป็นความผิดพลาดของการเขียนโปรแกรมเชิงวัตถุและคุณไม่ควรทำเช่นนั้น …

6
การเขียนโปรแกรมเชิงฟังก์ชั่นช่วยเพิ่มช่องว่างระหว่างปัญหาและแนวทางแก้ไขหรือไม่ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว เนื่องจากภาษาเครื่อง (เช่น0110101000110101) ภาษาคอมพิวเตอร์มีวิวัฒนาการโดยทั่วไปในรูปแบบที่เป็นนามธรรมสูงกว่าโดยทั่วไปทำให้ง่ายต่อการเข้าใจรหัสเมื่อมันถูกนำไปใช้กับปัญหา แอสเซมเบลอร์เป็นนามธรรมผ่านรหัสเครื่อง C เป็นนามธรรมเหนือแอสเซมเบลอร์ ฯลฯ การออกแบบเชิงวัตถุดูเหมือนว่าจะดีมากที่ช่วยให้เราสามารถจำลองปัญหาในแง่ของวัตถุเช่นปัญหาของระบบการลงทะเบียนหลักสูตรมหาวิทยาลัยสามารถทำแบบจำลองกับCourseชั้นStudentเรียนคลาส ฯลฯ จากนั้นเมื่อเราเขียนวิธีการแก้ปัญหา ในภาษา OO เรามีคลาสที่คล้ายกันซึ่งได้รับความรับผิดชอบและโดยทั่วไปมีประโยชน์สำหรับการออกแบบโดยเฉพาะอย่างยิ่งสำหรับการทำให้โค้ดเป็นโมดูล ถ้าฉันให้ปัญหานี้แก่ทีมอิสระ 10 คนที่แก้ปัญหาด้วยวิธี OO โดยทั่วไป 10 วิธีแก้ปัญหาจะมีชั้นเรียนที่เกี่ยวข้องกับปัญหาที่เหมือนกัน อาจมีความแตกต่างมากมายเมื่อคุณเริ่มมีเพศสัมพันธ์และการโต้ตอบของคลาสเหล่านั้นดังนั้นจึงไม่มีสิ่งเช่น "ศูนย์ช่องว่างการเป็นตัวแทน" ประสบการณ์การใช้งานฟังก์ชั่นการเขียนโปรแกรมของฉันมี จำกัด มาก (ไม่มีการใช้งานจริงในโลกมีเพียงโปรแกรมประเภท Hello World) ฉันล้มเหลวในการดูว่าภาษาดังกล่าวอนุญาตให้ทำแผนที่โซลูชั่น FP ได้อย่างง่ายดายเพื่อแก้ไขปัญหา (ด้วยช่องว่างที่เป็นตัวแทนต่ำ) ในแบบที่ภาษา OO ทำอย่างไร ฉันเข้าใจถึงข้อดีของ FP ที่เกี่ยวกับการเขียนโปรแกรมพร้อมกัน แต่ฉันขาดอะไรไปหรือ FP ไม่ได้ลดช่องว่างในการเป็นตัวแทน (ทำให้การแก้ปัญหาเข้าใจง่ายขึ้น)? อีกวิธีที่จะถามสิ่งนี้: …

4
การจัดการกับปัญหาสถานะในการเขียนโปรแกรมการทำงาน
ฉันได้เรียนรู้วิธีการเขียนโปรแกรมจากจุดยืนของ OOP เป็นหลัก (เช่นพวกเราส่วนใหญ่ฉันแน่ใจ) แต่ฉันใช้เวลามากมายในการเรียนรู้วิธีการแก้ปัญหาด้วยวิธีการทำงาน ฉันมีความเข้าใจที่ดีเกี่ยวกับวิธีการแก้ปัญหาการคำนวณด้วย FP แต่เมื่อมันมาถึงปัญหาที่ซับซ้อนมากขึ้นฉันก็พบว่าตัวเองมักจะกลับไปต้องการวัตถุที่ไม่แน่นอน ตัวอย่างเช่นถ้าฉันเขียนโปรแกรมจำลองอนุภาคฉันจะต้องการ "วัตถุ" ของอนุภาคที่มีตำแหน่งที่ไม่แน่นอนเพื่ออัปเดต ปัญหา "stateful" โดยเนื้อแท้จะแก้ไขโดยใช้เทคนิคการเขียนโปรแกรมการทำงานอย่างไร

1
การส่งผ่านฟังก์ชัน Scala ไปยังวิธีการ Java 8
โค้ด Scala ต่อไปนี้ใช้งานได้และสามารถส่งผ่านไปยังเมธอด Java ที่ต้องการฟังก์ชัน มีวิธีที่สะอาดกว่านี้หรือไม่? นี่คือการผ่านครั้งแรกของฉัน: val plusOne = new java.util.function.Function[Int,Int] { override def apply(t:Int):Int = t + 1 override def andThen[V](after:function.Function[_ >: Int, _ <: V]): function.Function[Int, V] = ??? override def compose[V](before:function.Function[_ >: V, _ <: Int]): function.Function[V, Int] = ??? } นี่คือรอบที่สองของฉัน - มันใช้ wrapper ทั่วไปสำหรับส่วนต่อประสานฟังก์ชั่น …

4
การติดตาเป็นภาษาที่ใช้งานได้จริงเพียงใด?
รูปแบบของการใช้ตัวจัดการคำสั่งในการจัดการกับการคงอยู่ของภาษาที่ใช้งานได้อย่างแท้จริงซึ่งเราต้องการทำให้โค้ดที่เกี่ยวข้องกับ IO มีความบางที่สุด เมื่อใช้การออกแบบที่ขับเคลื่อนด้วยโดเมนในภาษาเชิงวัตถุเป็นเรื่องปกติที่จะใช้รูปแบบคำสั่ง / ตัวจัดการเพื่อดำเนินการเปลี่ยนแปลงสถานะ ในการออกแบบตัวจัดการคำสั่งจะอยู่ด้านบนของวัตถุโดเมนของคุณและรับผิดชอบต่อตรรกะที่เกี่ยวข้องกับการคงอยู่ที่น่าเบื่อเช่นการใช้ที่เก็บข้อมูลและการเผยแพร่กิจกรรมโดเมน ตัวจัดการเป็นหน้าสาธารณะของโมเดลโดเมนของคุณ รหัสแอปพลิเคชันเช่น UI เรียกตัวจัดการเมื่อจำเป็นต้องเปลี่ยนสถานะของวัตถุโดเมน ร่างใน C #: public class DiscardDraftDocumentCommandHandler : CommandHandler<DiscardDraftDocument> { IDraftDocumentRepository _repo; IEventPublisher _publisher; public DiscardDraftCommandHandler(IDraftDocumentRepository repo, IEventPublisher publisher) { _repo = repo; _publisher = publisher; } public override void Handle(DiscardDraftDocument command) { var document = _repo.Get(command.DocumentId); document.Discard(command.UserId); _publisher.Publish(document.NewEvents); } …

5
อะไรทำให้ JVM มีความหลากหลายในการรองรับภาษา JVM มากมาย
JVM รองรับภาษาอื่น ๆ อีกมากมายนอกเหนือจาก Java เช่นGroovy,Clojure,Scalaetc ซึ่งเป็นภาษาที่ใช้งานได้แตกต่างจาก Java (ฉันหมายถึงJava ก่อนเวอร์ชัน 8ที่Lambda'sไม่รองรับ) ที่ไม่รองรับความสามารถในการทำงานในระดับสูงสิ่งที่ทำให้ JVM อเนกประสงค์นั้น สามารถรองรับทั้ง Object Oriented และ Function Functional ได้หรือไม่

3
ภาษาทำงานเร็วที่สุด
ฉันเพิ่งได้รับการขุดเจาะเข้าไปในการเขียนโปรแกรมการทำงานโดยเฉพาะอย่างยิ่ง Haskell และ F #, ก่อนหน้านี้มากขึ้น หลังจาก googling ไปรอบ ๆ ฉันไม่สามารถหาการเปรียบเทียบเกณฑ์มาตรฐานของภาษาที่ใช้งานได้ดีกว่า (Scala, F # ฯลฯ ) ฉันรู้ว่ามันไม่ยุติธรรมสำหรับบางภาษา (Scala มาถึงใจ) เนื่องจากพวกเขาเป็นลูกผสม แต่ฉันแค่อยากจะรู้ว่ามีประสิทธิภาพที่ดีกว่าซึ่งในการดำเนินงานและโดยรวม

6
คุณต้องการแนะนำต้นไม้ไบนารีที่ปรับสมดุลตัวเองแบบใด
ฉันเรียนรู้ Haskell และออกกำลังกายฉันกำลังสร้างต้นไม้ไบนารี ต้องสร้างต้นไม้ไบนารีขึ้นมาเป็นประจำฉันต้องการที่จะปรับมันให้สมดุลกัน ดังนั้น: ข้อใดมีประสิทธิภาพมากที่สุด สิ่งที่ง่ายที่สุดที่จะใช้? ใช้บ่อยที่สุด? แต่อะไรที่คุณแนะนำ? ฉันคิดว่าสิ่งนี้เป็นของที่นี่เพราะเปิดให้มีการอภิปราย

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