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

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

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

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

1
Rebol เป็นภาษาโปรแกรมที่ใช้งานได้หรือไม่?
ฉันวิ่งเข้าไปในRebolและฉันก็สงสัยเกี่ยวกับมัน ฉันพบสคริปต์ต่อไปนี้จากที่นี่ : use [feed questions answers][ feed: load-xml/dom http://stackoverflow.com/feeds/tag/rebol questions: map-each entry feed/get-by-tag <entry> [ find/match entry/get <id> "http://stackoverflow.com/q/" ] answers: make block! length? questions foreach question questions [ question: load-xml/dom join http://stackoverflow.com/feeds/question/ question foreach entry next question/get-by-tag <entry> [append answers entry/tree] ] insert clear feed/find-element <entry> answers feed/flatten …

2
ใครเป็นคนแรกที่ประกาศเกียรติคุณฟังก์ชันคำสั่งซื้อที่สูงขึ้นและ / หรือพลเมืองชั้นหนึ่ง?
ฉันเข้าใจมานานแล้วว่าก่อนที่ Haskell, O'Caml หรือ LISP หน้าที่การสั่งงานที่สูงขึ้นจะเป็นวิชาวิจัยทางวิชาการและในวิชาคณิตศาสตร์Schönfinkel (ในปี 1967) และ Haskell Curry (ในปี 1968) ได้ใช้เทคนิคเช่น currying แต่ ก่อนหน้านี้มีให้ในภาษาการเขียนโปรแกรมใด ๆ Scheme ตาม Wikipediaเป็นภาษาแรกที่แนะนำฟังก์ชั่นการสั่งซื้อที่สูงขึ้นอย่างเหมาะสมในฐานะพลเมืองชั้นหนึ่ง แต่มีใครบ้างที่เราสามารถให้ความคิดดั้งเดิมได้ บางทีโบสถ์อลองโซผู้คิดค้นแลมบ์ดาแคลคูลัสในทศวรรษ 1930? โดยเฉพาะอย่างยิ่งใครเป็นผู้นิยามคำนิยามต่อไปนี้ซึ่งฉันเห็นในการถอดความหลายเรื่องในหนังสือหลายเล่มและแหล่งข้อมูลออนไลน์ ฟังก์ชั่นจะถือว่าเป็นลำดับที่สูงขึ้นเมื่อใช้ฟังก์ชันอื่นเป็นอาร์กิวเมนต์หรือเมื่อส่งคืนฟังก์ชัน ฟังก์ชันใด ๆ ที่ไม่รับฟังก์ชั่นเป็นอาร์กิวเมนต์หรือเป็นชนิดส่งคืนจะเรียกว่าฟังก์ชันลำดับแรก

1
ดีกว่าที่จะใช้ข้อผิดพลาด monad กับการตรวจสอบในฟังก์ชั่น monadic ของคุณหรือใช้ monad ของคุณเองด้วยการตรวจสอบโดยตรงในการผูกของคุณ?
ฉันสงสัยว่าการออกแบบที่ดีกว่าคืออะไรสำหรับการใช้งาน / การบำรุงรักษาและสิ่งที่ดีกว่าเท่าที่เหมาะสมกับชุมชน รับรูปแบบข้อมูล: type Name = String data Amount = Out | Some | Enough | Plenty deriving (Show, Eq) data Container = Container Name deriving (Show, Eq) data Category = Category Name deriving (Show, Eq) data Store = Store Name [Category] deriving (Show, Eq) data Item = Item …

4
มีอะไรพิเศษเกี่ยวกับการแกงหรือการใช้งานบางส่วน
ฉันได้อ่านบทความเกี่ยวกับการเขียนโปรแกรมฟังก์ชั่นทุกวันและพยายามที่จะใช้แนวทางปฏิบัติบางอย่างให้มากที่สุด แต่ฉันไม่เข้าใจสิ่งที่เป็นเอกลักษณ์ในการประยุกต์ใช้การ currying หรือบางส่วน ใช้โค้ด Groovy นี้เป็นตัวอย่าง: def mul = { a, b -> a * b } def tripler1 = mul.curry(3) def tripler2 = { mul(3, it) } ฉันไม่เข้าใจความแตกต่างระหว่างtripler1และtripler2คืออะไร พวกเขาทั้งคู่ไม่เหมือนกันหรือ 'การแกง' ได้รับการสนับสนุนในภาษาที่ใช้งานได้จริงหรือบางส่วนเช่น Groovy, Scala, Haskell เป็นต้น แต่ฉันสามารถทำสิ่งเดียวกันได้ (แกงเผ็ดซ้าย, แกงกะหรี่ขวา, แกงกะหรี่หรือแอปพลิเคชั่นบางส่วน) เพียงแค่สร้างชื่อหรือไม่ระบุชื่อ ฟังก์ชั่นหรือการปิดที่จะส่งต่อพารามิเตอร์ไปยังฟังก์ชั่นเดิม (เช่นtripler2) ในภาษาส่วนใหญ่ (แม้ C. ) ฉันทำอะไรบางอย่างหายไปหรือเปล่า มีสถานที่ที่ฉันสามารถใช้แอปพลิเคชั่นการแกงและบางส่วนในแอปพลิเคชัน …

5
เปลี่ยนวิธีคิดในการเตรียมการสำหรับการเขียนโปรแกรมการทำงาน
เมื่อเปลี่ยนเป็นรูปแบบการทำงานของการเขียนโปรแกรมหลังจากมาจากขั้นตอนและ OOP ฉันจำเป็นต้องรู้อะไรบ้างเกี่ยวกับ "วิธีคิดแบบใหม่นี้" คุณจะเตรียมตัวสำหรับการดำน้ำในโลก FP และทำให้เป็นครั้งแรกได้อย่างไร พื้นฐานในการเรียนรู้และการตั้งค่าตรงก่อนคืออะไร?

1
ฟังก์ชั่นการสลายตัวเป็นปฏิปักษ์จริงหรือไม่?
ในขณะที่ฉันกำลังอ่านรูปแบบการต่อต้านที่แย่ที่สุดที่คุณเจอฉันคลิกที่ลิงค์ในโพสต์นี้เพื่อลงบนเว็บไซต์เกี่ยวกับรูปแบบการต่อต้าน และหน้าhttp://sourcemaking.com/antipatterns/functional-decompositionทำให้ฉันสงสัย รูปแบบการต่อต้านนี้แย่ขนาดไหนและเป็นรูปแบบการต่อต้านเลยหรือไม่? เพราะถึงแม้ว่าฉันจะเขียนโปรแกรม OOP เป็นส่วนใหญ่ในทุกวันนี้ แต่ฉันก็ยังรู้สึกไม่เต็มใจกับภาษา OOP ที่บริสุทธิ์ทุกอย่างเช่น Java และวิธีการออกแบบที่พวกเขานำมาใช้ และฉันเดาว่าฉันยังคงมีคุณลักษณะบางอย่างของการเขียนโปรแกรมฟังก์ชั่นในขณะที่ฉันเขียนรหัส และสิ่งนี้ทำให้เกิดคำถามขึ้นฉันกำลังทำผิดโดยติดกับ OOP + ฟังก์ชั่นสไตล์หรือเป็นเรื่องธรรมดาในอุตสาหกรรมและไม่ใช่เรื่องเลวร้าย สิ่งที่ฉันรู้จากประสบการณ์คือสไตล์ OOP + ฟังก์ชั่นไม่เข้ากันได้กับนักพัฒนา OOP อย่างแท้จริง แต่ในขณะเดียวกันในขณะที่นักพัฒนา OOP มีปัญหากับการพัฒนา OOP + ฟังก์ชั่นการโต้เถียงก็คือการแก้ปัญหา OOP มักจะใช้งานมากเกินไปและยากต่อการใช้งานและจากประสบการณ์ของฉันไม่ได้ง่ายขึ้นสักหน่อยจริงๆ แนะนำจุดบอดบางอย่างสำหรับข้อบกพร่องที่ร้ายแรงมากที่จะซ่อน ดังนั้นแม้ว่าฉันจะพูดคุยกับเพื่อนร่วมงานของฉันเกี่ยวกับหัวข้อเหล่านี้ฉันก็สรุปได้ว่าไม่มีวิธีใดที่สมบูรณ์แบบจริง และฉันยังคงมีคำถามที่ยังไม่ได้ตอบ ปัญหา OOP ได้รับการเสริมด้วยลิงก์จากโพสต์อื่นในเธรดเดียวกัน ลิงค์จะดูที่สไตล์ OOP ของ Java http://chaosinmotion.com/blog/?p=622 ดังนั้นทัศนคติทั่วไปที่มีต่อการผสมการทำงานของโปรแกรมกับ OOP คืออะไร? และอะไรคือความสมดุลที่นักพัฒนาควรพยายามที่จะบรรลุ?

3
Getters และ Setters ในภาษาที่ใช้งานได้
หนึ่งในหลักของการเขียนโปรแกรมฟังก์ชั่นคือการใช้ฟังก์ชั่นบริสุทธิ์ ฟังก์ชั่น Pure เป็นฟังก์ชันที่ปราศจากผลข้างเคียงและโปร่งใสอ้างอิง Gettersไม่โปร่งใสในการอ้างอิง - หาก Setter ถูกเรียกระหว่างการเรียกไปยัง Getter ค่าส่งคืนของ Getter จะเปลี่ยนแม้ว่าพารามิเตอร์จะไม่มี (โดยทั่วไปจะไม่มีพารามิเตอร์) Settersสร้างผลข้างเคียง - การเรียก Setter โดยทั่วไปจะจัดการกับค่าที่ไม่ใช่ค่าส่งคืน (อันที่จริงแล้วโดยทั่วไปแล้ว Setter จะไม่ส่งคืนค่าใด ๆ ) ฉันรู้ว่าในสกาล่าเราแค่ยอมรับความจริงที่ว่าเรากำลังผสานสองกระบวนทัศน์ (เชิงหน้าที่และเชิงวัตถุ) และใช้ getters / setters ตามที่เราต้องการในภาษาเช่น Java ในภาษาอย่าง Haskell (ซึ่งฉันไม่คล่องแคล่ว แต่ฉันบอกว่าถือเป็นภาษาที่ใช้งานได้จริง "บริสุทธิ์") ฉันแค่อยากรู้อยากเห็นว่าคุณจะจำลองคุณสมบัติของวัตถุเช่น Getters นั้นมีความโปร่งใสและ Setters ได้อย่างไร ผลข้างเคียงฟรีหรือไม่ วิธีการแก้ปัญหาจะส่งกลับสำเนาของวัตถุที่ setter ถูกเรียกเมื่อเป็นค่าส่งคืนของ setter และสำเนานี้มีการเปลี่ยนแปลงค่าทรัพย์สิน?

4
กระบวนทัศน์ใดที่จะใช้สำหรับการเขียนเอ็นจิ้นหมากรุก
หากคุณกำลังจะเขียนเอ็นจิ้นเกมหมากรุกคุณจะใช้กระบวนทัศน์การเขียนโปรแกรมแบบใด (OOP ขั้นตอน ฯลฯ ) และทำไมคุณถึงเลือกใช้ โดยโปรแกรมหมากรุกฉันหมายถึงส่วนของโปรแกรมที่ประเมินบอร์ดปัจจุบันและตัดสินใจการเคลื่อนที่ครั้งต่อไปของคอมพิวเตอร์ ฉันถามเพราะฉันคิดว่าการเขียนเอ็นจิ้นหมากรุกเป็นเรื่องสนุก จากนั้นก็เกิดขึ้นกับฉันที่ฉันสามารถใช้เป็นโครงการสำหรับการเรียนรู้การเขียนโปรแกรมการทำงาน จากนั้นมันเกิดขึ้นกับฉันว่าปัญหาบางอย่างไม่เหมาะกับกระบวนทัศน์การทำงาน จากนั้นก็เกิดขึ้นกับฉันว่านี่อาจเป็นการสนทนาที่ดี
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.