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

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

5
สามารถใช้งานโปรแกรมใด ๆ ของ * ที่ไม่มีสถานะได้หรือไม่?
นี่เป็นคำถามเชิงทฤษฎี แต่หลังจากหลายปีของการเขียนโปรแกรมในสิ่งที่ฉันรู้ตอนนี้คือเทคนิค "ปกติ" ที่จำเป็นโดยใช้ C ++ ส่วนใหญ่ฉันได้ค้นพบโลกแห่งการเขียนโปรแกรมเชิงปฏิบัติการอีกครั้งซึ่งฉันบังเอิญบังเอิญเรียนรู้ JavaScript นี่ทำให้ฉันสงสัยว่าคุณสามารถแทนที่โปรแกรมเชิงรัฐที่สมบูรณ์ด้วยการใช้งานที่แตกต่างกันซึ่งใช้งานได้จริงและไม่มีรัฐหรือไม่? มันเป็นความคิดที่น่าสนใจและฉันต้องยอมรับว่ามีความชัดเจนและความสง่างามในการเขียนโปรแกรมฟังก์ชั่นที่ทำให้ใจของฉันแย่จริงๆ

1
เหตุใดจึงต้องมีการเขียนโปรแกรมที่จำเป็นมากกว่าการเขียนโปรแกรมที่ใช้งานได้? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ความเป็นมา:ฉันเป็นผู้สนับสนุนการเขียนโปรแกรมฟังก์ชั่นที่ทำงานที่ร้าน VB.NET ซึ่งรูปแบบจิตที่แพร่หลายคือการเขียนโปรแกรมที่จำเป็น การเป็นรากฐานของระบบของเราคือ WinForms ฉันสามารถเข้าใจได้ว่าเราจะไม่หนีจากการเขียนโปรแกรมที่จำเป็นทั้งหมด แต่ฉันก็ยังพยายามใช้ FP (หลัก ๆ ผ่าน Linq) ทุกที่ที่ทำได้เพราะฉันเชื่อในข้อดีของมัน อาร์กิวเมนต์ & การโต้แย้งแย้งกับ FP บางคนอาจสังเกตเห็นว่าความคล่องแคล่วของ Linq นั้นมีประสิทธิภาพน้อยกว่าคู่ที่จำเป็นในลักษณะนี้จะประมวลผลลำดับลงไปที่ลำดับอื่นและทำซ้ำนั้น โดยทั่วไปมันจะใช้เวลาอีกสองสามครั้งกว่าวิธีการที่จำเป็นซึ่งสามารถปรับให้เหมาะสมได้ดีกว่าเพื่อหลีกเลี่ยงการทำซ้ำซ้ำในลำดับ ด้วยเหตุนี้ผู้นำจึงไม่เข้าใจว่าทำไมฉันจึงเลือกวิธีการใช้งานที่ชัดเจนว่า "มีประสิทธิภาพน้อยลง" การโต้แย้ง : ฉันแย้งว่าในขณะที่บางครั้งมันมีประสิทธิภาพน้อยกว่าในแง่ของรอบการทำงานของ CPU แต่ฉันรู้สึกว่ามันเป็นสิ่งที่เข้าใจง่ายและเป็นมนุษย์มากกว่าเพราะแต่ละบรรทัดทำสิ่งเดียวที่ผ่านไปตามลำดับ สำหรับฉันนี้รู้สึกเหมือนมีสายการประกอบที่แต่ละคนที่สถานีของเขามีเพียงงานเดียวที่จะทำ ฉันรู้สึกว่าการแลกเปลี่ยนที่มีประสิทธิภาพน้อยมากได้รับการตอบแทนด้วยรหัสที่มีข้อกังวลแยกออกจากกันอย่างเรียบร้อย ข้อโต้แย้งต่อไปกับ FP ที่ฉันได้ยินในร้านค้าของฉันคือการ debug ยากขึ้นซึ่งเป็นเรื่องจริง ไม่ใช่เรื่องง่ายที่จะเหยียบรหัส Linq และบางครั้งฉันก็ต้องคลี่คลายห่วงโซ่วิธีการเพื่อติดตามและแยกแยะปัญหาที่ฉันไม่สามารถมองเห็นได้ทันที _Counter-argument: ส่วนใหญ่แม้ว่าฉันจะไม่ได้มีปัญหากับเรื่องนี้เพราะฉันคิดว่ารูปแบบการทำงานนั้นมีความชัดเจนในการอ่านและเมื่อมีข้อผิดพลาดเกิดขึ้นในห่วงโซ่การทำงานฉันมักจะเห็นปัญหาทันที คำถามของฉัน ฉันพยายามโปรโมตสไตล์การใช้งานในร้านของเราและฉันไม่รู้สึกว่ากำลังทำอะไรอยู่ ฉันทำทั้งสองรูปแบบของการเขียนโปรแกรมและเพิ่งขลุกอยู่ใน …

1
C ++ 11 รองรับฟังก์ชั่นรายการลำดับสูงกว่า
ส่วนใหญ่ทำงานเขียนโปรแกรมภาษา (เช่น Common เสียงกระเพื่อมโครงการ / แร็กเก็ต, Clojure, Haskell, สกาล่า Ocaml, SML) สนับสนุนบางส่วนทำงานร่วมกันขั้นสูงในรายการเช่นmap, filter, takeWhile, dropWhile, foldl, foldr(ดูเช่นCommon เสียงกระเพื่อมโครงการ / แร็กเก็ต, Clojure เอกสารอ้างอิงแบบเคียงข้างกัน , เอกสารHaskell , Scala , OCamlและSML ) C ++ 11 มีวิธีการหรือฟังก์ชั่นมาตรฐานที่เทียบเท่าในรายการหรือไม่? ตัวอย่างเช่นลองพิจารณาตัวอย่าง Haskell ต่อไปนี้: let xs = [1, 2, 3, 4, 5] let ys = map (\x -> …

5
คำที่เหมาะสมสำหรับฟังก์ชันผกผันกับตัวสร้างคือการแกะค่าออกจากชนิดข้อมูล
แก้ไข:ฉันกำลังใช้คำถามใหม่อีกครั้ง เห็นได้ชัดว่าฉันทำให้เกิดความสับสนเพราะฉันไม่ได้ตระหนักว่าคำว่าdestructorถูกใช้ใน OOP สำหรับสิ่งที่แตกต่างกันมาก - เป็นฟังก์ชันที่เรียกใช้เมื่อวัตถุถูกทำลาย ในการเขียนโปรแกรมการทำงานเรา (พยายาม) หลีกเลี่ยงสถานะที่เปลี่ยนแปลงไม่ได้ดังนั้นจึงไม่เทียบเท่ากับมัน (ฉันเพิ่มแท็กที่เหมาะสมให้กับคำถาม) แต่ผมเคยเห็นว่าการบันทึกข้อมูลสำหรับ unwrapping ค่า (โดยเฉพาะอย่างยิ่งสำหรับชนิดข้อมูล valued เดียวเช่นnewtypes) บางครั้งเรียกว่าdestructorหรือบางทีอาจจะDeconstructor ตัวอย่างเช่นมี (ใน Haskell): newtype Wrap = Wrap { unwrap :: Int } นี่Wrapคือตัวสร้างและunwrapอะไร คำถามคือ: เราจะเรียกunwrapโปรแกรมการทำงานได้อย่างไร Deconstructor? Destructor? หรือคำอื่น ๆ ? และเพื่อชี้แจงว่าคำศัพท์นี้ / อื่น ๆ สามารถใช้งานได้กับภาษาอื่น ๆหรือใช้ใน Haskell หรือไม่? บางทีอาจมีคำศัพท์สำหรับเรื่องนี้โดยทั่วไปในภาษาที่ไม่สามารถใช้งานได้หรือไม่? ฉันเห็นทั้งสองคำแล้วเช่น: ... บ่อยครั้งที่หนึ่งมีตัวสร้างสมาร์ทและdestructors ที่ฉลาดเหล่านี้เพื่อความสะดวกในการทำงานกับพวกเขา …

2
มีเวิร์กโฟลว์เฉพาะหรือรูปแบบการออกแบบที่ใช้กันทั่วไปเพื่อสร้างแอปพลิเคชั่นการเขียนโปรแกรมฟังก์ชั่นขนาดใหญ่หรือไม่? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันได้ทำการสำรวจ Clojure มาระยะหนึ่งแล้วถึงแม้ว่าฉันจะไม่ได้ใช้มันในโครงการที่ไม่สำคัญ โดยพื้นฐานแล้วฉันเพิ่งคุ้นเคยกับไวยากรณ์และสำนวนบางอย่าง มาจากพื้นหลังของ OOP โดย Clojure เป็นภาษาแรกที่ฉันใช้มองอย่างมากฉันไม่ชอบวิธีการทำสิ่งต่าง ๆ ที่กล่าวว่ามีเวิร์กโฟลว์เฉพาะหรือรูปแบบการออกแบบที่เหมือนกันกับการสร้างแอปพลิเคชันที่ใช้งานได้ขนาดใหญ่หรือไม่? ฉันอยากเริ่มใช้การเขียนโปรแกรมฟังก์ชั่น "ของจริง" แต่ฉันกลัวว่าหากขาดความเชี่ยวชาญในปัจจุบันของฉันมันจะทำให้มหากาพย์ล้มเหลว "Gang of Four" นั้นเป็นมาตรฐานสำหรับโปรแกรมเมอร์ OO แต่มีอะไรที่คล้ายกันมากกว่านี้ที่ให้ความสำคัญกับกระบวนทัศน์การทำงานหรือไม่? ทรัพยากรส่วนใหญ่ที่ฉันพบมีนักเก็ตโปรแกรมที่ยอดเยี่ยม แต่พวกเขาไม่ถอยกลับเพื่อให้ดูกว้างขึ้นและมีสถาปัตยกรรมมากขึ้น

5
ฟังก์ชั่นการอ่านโปรแกรมการทำงาน [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ฉันอยากรู้เกี่ยวกับเรื่องนี้เพราะฉันจำก่อนที่จะเรียนรู้ภาษาที่ใช้งานได้ใด ๆ ฉันคิดว่าพวกเขาทั้งหมดอย่างน่ากลัว, สุดยอดและไม่สามารถอ่านได้ชะมัด ตอนนี้ฉันรู้ Haskell และ f # ฉันพบว่าใช้เวลานานกว่าในการอ่านรหัสน้อยลง แต่รหัสน้อยนั้นทำเกินกว่าจำนวนที่เท่ากันจะเป็นภาษาที่จำเป็นดังนั้นจึงรู้สึกว่าได้รับสุทธิและฉันก็ไม่ได้เป็นอย่างยิ่ง มีประสบการณ์ในการทำงาน นี่คือคำถามของฉันฉันมักจะได้ยินจากคน OOP ที่สไตล์การทำงานไม่สามารถอ่านได้มาก ฉันอยากรู้ว่าเป็นกรณีนี้หรือไม่และฉันหลอกตัวเองหรือถ้าพวกเขาใช้เวลาในการเรียนรู้ภาษาที่ใช้งานได้ทั้งสไตล์จะไม่สามารถอ่านได้มากกว่า OOP อีกต่อไป? มีใครเคยเห็นหลักฐานหรือมีเกร็ดเล็กเกร็ดน้อยใด ๆ ที่พวกเขาเห็นสิ่งนี้ไม่ทางใดก็ทางหนึ่งโดยมีความถี่เพียงพอที่จะพูดได้หรือไม่? ถ้าการเขียนฟังก์ชั่นมีความสามารถในการอ่านต่ำกว่าจริง ๆ แล้วฉันไม่ต้องการใช้มันต่อไป แต่ฉันไม่รู้ว่ามันเป็นจริงหรือไม่ ..

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


9
ทรัพยากรสำหรับการปรับปรุงความเข้าใจในการเรียกซ้ำของคุณ? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันรู้ว่าการเรียกซ้ำคืออะไร (เมื่อ patten reoccurs อยู่ภายในตัวเองโดยทั่วไปแล้วฟังก์ชั่นที่เรียกตัวเองว่าเป็นหนึ่งในสายของมันหลังจากการแบ่งแบบมีเงื่อนไข ... ใช่ไหม?) และฉันสามารถเข้าใจฟังก์ชั่นแบบเรียกซ้ำได้ ปัญหาของฉันคือเมื่อฉันเห็นตัวอย่างใหม่ฉันมักสับสนอยู่เสมอ ถ้าฉันเห็นการวนซ้ำหรือการแมปการซิปการทำรังการเรียก polymorphic และอื่น ๆ ฉันรู้ว่าจะเกิดอะไรขึ้นโดยดูที่มัน เมื่อฉันเห็นรหัสซ้ำกระบวนการคิดของฉันมักจะเป็น 'wtf นี่คืออะไร' ตามด้วย 'oh it recursive' ตามด้วย 'ฉันเดาว่ามันต้องใช้งานถ้าพวกเขาบอกว่าทำ' คุณมีเคล็ดลับ / แผน / ทรัพยากรเพื่อสร้างทักษะในด้านนี้หรือไม่? การเรียกซ้ำเป็นแนวคิดแปลก ๆ ดังนั้นฉันจึงคิดวิธีจัดการกับมันอาจจะแปลกและไม่เท่าเทียมกันเท่ากัน

4
ฟังก์ชั่นการเขียนโปรแกรม - รู้หรือไม่ว่าจะช่วยให้อนาคตของงาน? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ภาษาหลักที่ฉันใช้ในขณะนี้คือ C # และฉันก็สบายใจที่สุด อย่างไรก็ตามฉันได้เริ่มเล่นน้ำใน F # และ Haskell และสนุกไปกับ langauges เหล่านั้นจริงๆ ฉันชอบที่จะพัฒนาทักษะของฉันในภาษาเหล่านั้นเมื่อเวลาผ่านไปเพราะมันสนุกสำหรับฉันที่จะใช้พวกเขา (ตรงข้ามกับ Ruby ซึ่งเป็น hyped ว่า "สนุก" ฉันแค่ไม่ได้รับความสนุก แต่ ฉันเชือนแช ... ) คำถามของฉันจะถูกส่งตรงไปยังผู้ที่ได้รับการว่าจ้าง / สัมภาษณ์ตำแหน่งการเขียนโปรแกรม (รุ่นจูเนียร์ / ระดับกลาง): หากคุณเห็นภาษาโปรแกรมการทำงานในประวัติย่อมันจะส่งผลกระทบต่อความคิดเห็นของคุณ เหตุผลของฉันสำหรับความรู้เกี่ยวกับฟังก์ชั่นการเขียนโปรแกรมที่มีผลต่อมุมมองของผู้สมัครเป็นเพราะมันสามารถแสดงให้เห็นว่าผู้สมัครสามารถปรับให้เข้ากับวิธีการที่แตกต่างกันและใช้วิธีการ mulit (นี่อาจจะเป็นฐานโปรดแจ้งให้เราทราบหากข้อสันนิษฐานนี้เป็นอย่างดี!)

4
FP และ OO orthogonal?
ฉันเคยได้ยินครั้งนี้และอีกครั้งและฉันพยายามที่จะเข้าใจและตรวจสอบความคิดที่ว่า FP และ OO เป็นมุมฉาก ประการแรกมันหมายความว่าอย่างไรสำหรับ 2 แนวคิดที่จะเป็นมุมฉาก FP ส่งเสริมการไม่เปลี่ยนรูปและความบริสุทธิ์ให้มากที่สุด และ OO ดูเหมือนสิ่งที่สร้างขึ้นสำหรับรัฐและการกลายพันธุ์ และฉันรู้ว่าวัตถุนั้นไม่สามารถเปลี่ยนแปลงได้ แต่ OO ดูเหมือนจะบอกเป็นนัยถึงการเปลี่ยนแปลงของฉัน พวกเขาดูเหมือนตรงกันข้าม นั่นหมายความว่าพวกเขาเป็นมุมฉาก? ภาษาอย่างสกาล่าทำให้ง่ายต่อการทำ OO และ FP ทั้งสองสิ่งนี้ส่งผลกระทบต่อความตั้งฉากของทั้งสองวิธีหรือไม่?

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

4
เมื่อการเขียนโปรแกรมในลักษณะการทำงานคุณมีสถานะแอปพลิเคชันเดียวที่คุณสานผ่านตรรกะของแอปพลิเคชันหรือไม่
ฉันจะสร้างระบบที่มีสิ่งต่อไปนี้ทั้งหมดได้อย่างไร : การใช้ฟังก์ชั่นบริสุทธิ์กับวัตถุที่ไม่เปลี่ยนรูป ส่งผ่านไปยังข้อมูลฟังก์ชันที่ฟังก์ชันต้องการเท่านั้นไม่เกิน (เช่นไม่มีวัตถุสถานะแอปพลิเคชันขนาดใหญ่) หลีกเลี่ยงการขัดแย้งกับฟังก์ชันมากเกินไป หลีกเลี่ยงการสร้างวัตถุใหม่เพียงเพื่อจุดประสงค์ในการบรรจุและเอาพารามิเตอร์ออกจากฟังก์ชั่นเพื่อหลีกเลี่ยงการส่งพารามิเตอร์ไปยังฟังก์ชันมากเกินไป ถ้าฉันจะแพ็คหลายรายการไปยังฟังก์ชันเป็นวัตถุเดียวฉันต้องการให้วัตถุนั้นเป็นเจ้าของข้อมูลนั้นไม่ใช่สิ่งที่สร้างขึ้นชั่วคราว สำหรับฉันแล้วดูเหมือนว่ารัฐ monad ทำผิดกฎข้อที่ 2 ถึงแม้ว่ามันจะไม่ชัดเจนเพราะมันถูกสานต่อผ่าน monad ฉันรู้สึกว่าฉันจำเป็นต้องใช้เลนส์อย่างใด แต่มีน้อยมากที่เขียนเกี่ยวกับมันสำหรับภาษาที่ไม่สามารถใช้งานได้ พื้นหลัง ในการออกกำลังกายฉันกำลังแปลงแอปพลิเคชันที่มีอยู่ของฉันจากสไตล์เชิงวัตถุเป็นสไตล์การทำงาน สิ่งแรกที่ฉันพยายามทำคือการสร้างแกนในของแอปพลิเคชันให้ได้มากที่สุด สิ่งหนึ่งที่ฉันได้ยินคือวิธีการจัดการ "รัฐ" ในภาษาที่ใช้งานได้อย่างหมดจดและนี่คือสิ่งที่ฉันเชื่อว่าทำโดย Monads ของรัฐนั่นคือเหตุผลที่คุณเรียกฟังก์ชันบริสุทธิ์ว่า "ผ่านสถานะของ โลกตามที่มันเป็น "จากนั้นเมื่อฟังก์ชั่นกลับมาก็จะกลับสู่สถานะของโลกตามที่มีการเปลี่ยนแปลง เพื่อแสดงให้เห็นว่าวิธีการที่คุณสามารถทำ "สวัสดีโลก" ในลักษณะการทำงานล้วนเป็นเหมือนคุณผ่านโปรแกรมของคุณที่สถานะของหน้าจอและรับกลับสถานะของหน้าจอด้วยการพิมพ์ "สวัสดีโลก" ดังนั้นในทางเทคนิคคุณกำลังโทรไปยังฟังก์ชั่นที่บริสุทธิ์และไม่มีผลข้างเคียง จากนั้นฉันก็ผ่านแอปพลิเคชันของฉันและ: 1. ขั้นแรกให้สถานะแอปพลิเคชันทั้งหมดของฉันเป็นวัตถุระดับโลกเดียว (GameState) 2. ประการที่สองฉันทำให้ GameState ไม่เปลี่ยนรูป คุณไม่สามารถเปลี่ยนได้ หากคุณต้องการการเปลี่ยนแปลงคุณต้องสร้างสิ่งใหม่ ฉันทำสิ่งนี้โดยการเพิ่มตัวคัดลอกตัวเลือกที่จะเลือกหนึ่งหรือมากกว่าหนึ่งช่องที่มีการเปลี่ยนแปลง 3. สำหรับแต่ละแอปพลิเคชันฉันส่งผ่าน GameState เป็นพารามิเตอร์ ภายในฟังก์ชั่นหลังจากที่ทำสิ่งที่มันจะทำมันจะสร้าง GameState ใหม่และส่งคืน …

2
Haskell หาทางแก้ไขปัญหา 3n + 1
นี่เป็นปัญหาที่การเขียนโปรแกรมอย่างง่ายจาก Spoj: http://www.spoj.com/problems/PROBTRES/ โดยพื้นฐานแล้วคุณจะถูกขอให้แสดงรอบวัฏจักร Collatz ที่ใหญ่ที่สุดสำหรับตัวเลขระหว่าง i และ j (รอบ Collatz ของจำนวน $ n $ คือจำนวนขั้นตอนที่จะได้รับจาก $ n $ ถึง 1 ในที่สุด) ฉันได้มองหาวิธี Haskell เพื่อแก้ปัญหาด้วยประสิทธิภาพเปรียบเทียบมากกว่าของ Java หรือ C ++ (เพื่อให้พอดีกับขีด จำกัด เวลาทำงานที่อนุญาต) แม้ว่าโซลูชัน Java อย่างง่ายที่จดจำความยาวของรอบของรอบใด ๆ ที่คำนวณแล้วจะใช้งานได้ แต่ฉันไม่ประสบความสำเร็จในการนำแนวคิดนี้ไปใช้เพื่อรับโซลูชัน Haskell ฉันได้พยายาม Data.Function.Memoize เช่นเดียวกับเทคนิค memoization ที่่กลั่นในบ้านเวลาเข้าสู่ระบบโดยใช้ความคิดจากการโพสต์นี้: /programming/3208258/memoization-in-haskell น่าเสียดายที่การบันทึกช่วยจำทำให้การคำนวณรอบ (n) ช้าลง ฉันเชื่อว่าช้าลงมาจากค่าใช้จ่ายของทาง Haskell …

5
เหตุใดโปรแกรมการทำงานจึงมีความสัมพันธ์ระหว่างความสำเร็จในการรวบรวมและความถูกต้อง
ฉันมีแนวโน้มที่จะเขียนโปรแกรมการทำงานเป็นเวลา 4 ปีแล้วตั้งแต่ฉันเริ่มทำงานกับ LINQ เป็นครั้งแรก เมื่อเร็ว ๆ นี้ฉันเขียนโค้ด C # ที่ใช้งานได้จริงและฉันสังเกตเห็นสิ่งแรกที่ฉันได้อ่านเกี่ยวกับโปรแกรมที่ใช้งานได้ซึ่งเมื่อพวกเขารวบรวมพวกเขามักจะถูกต้อง ฉันพยายามใส่นิ้วว่าทำไมกรณีนี้ แต่ฉันยังไม่ประสบความสำเร็จ สิ่งหนึ่งที่เดาได้คือในการใช้หลักการ OO คุณมี "abstraction layer" ที่ไม่ได้อยู่ในโปรแกรมการทำงานและ layer abstraction นี้ทำให้สัญญาระหว่างวัตถุถูกต้องในขณะที่การนำไปใช้นั้นไม่ถูกต้อง มีใครคิดเกี่ยวกับเรื่องนี้และเกิดขึ้นด้วยเหตุผลนามธรรมพื้นฐานสำหรับความสัมพันธ์ระหว่างความสำเร็จในการรวบรวมและความถูกต้องของโปรแกรมในการเขียนโปรแกรมการทำงาน?

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