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

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

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

1
วิธีการใช้สาขาและผูกพันในภาษาการเขียนโปรแกรมการทำงานหรือไม่
ฉันพยายามเขียนสาขาและค้นหาขอบเขตในชุดของฟังก์ชั่นทั้งหมด f: D -> R ซึ่งขนาดโดเมนเล็ก (| D | ~ 20) และช่วงนั้นใหญ่กว่ามาก (| R | ~ 2 ^ 20 ) ตอนแรกฉันคิดวิธีแก้ปัญหาต่อไปนี้ (builder (domain range condlist partial-map) (let ((passed? (check condlist partial-map))) (cond ((not passed?) nil) (domain (recur-on-first domain range condlist partial-map '())) (t partial-map)))) (recur-on-first (domain range condlist partial-map ignored) …

6
ฟังก์ชั่นการเขียนโปรแกรมเป็นชุดของวัตถุที่มุ่งเน้น?
ยิ่งฉันเขียนโปรแกรมที่ใช้งานได้มากเท่าไหร่ฉันก็ยิ่งรู้สึกว่ามันเพิ่มเลเยอร์สิ่งที่เป็นนามธรรมซึ่งดูเหมือนว่าเลเยอร์ของหอมหัวใหญ่เป็นอย่างไรรวมไปถึงเลเยอร์ก่อนหน้า ฉันไม่รู้ว่านี่เป็นความจริงหรือเปล่าดังนั้นเพื่อปิดหลักการ OOP ที่ฉันเคยทำมานานหลายปีแล้วใครจะอธิบายได้ว่าการทำงานหรือไม่สามารถอธิบายสิ่งเหล่านี้ได้อย่างถูกต้อง: Encapsulation, Abstraction, Inheritance, Polymorphism ฉันคิดว่าเราทุกคนสามารถพูดได้ใช่มันมีการห่อหุ้มผ่านทูเปิลหรือสิ่งอันดับนับเป็นเทคนิคในความเป็นจริงของ "การเขียนโปรแกรมฟังก์ชั่น" หรือพวกเขาเป็นเพียงยูทิลิตี้ของภาษา? ฉันรู้ว่า Haskell สามารถตอบสนองความต้องการ "อินเทอร์เฟซ" แต่อีกครั้งไม่แน่ใจว่ามันเป็นวิธีการทำงานจริงหรือไม่ ฉันคาดเดาว่าความจริงที่ว่า functors มีพื้นฐานทางคณิตศาสตร์ที่คุณสามารถบอกได้ว่าสิ่งเหล่านี้เป็นสิ่งที่แน่นอนในการคาดหวังการทำงาน โปรดให้รายละเอียดว่าคุณคิดว่าการทำงานทำหน้าที่หรือไม่ปฏิบัติตาม 4 หลักการของ OOP แก้ไข: ฉันเข้าใจความแตกต่างระหว่างกระบวนทัศน์การทำงานและกระบวนทัศน์เชิงวัตถุได้ดีและตระหนักว่ามีหลายภาษาหลายภาษาในทุกวันนี้ซึ่งสามารถทำได้ทั้งสองอย่าง ฉันแค่กำลังมองหาคำจำกัดความของวิธีการที่ fp ทันที (คิดว่าคนพิถีพิถันเช่น haskell) สามารถทำสิ่งใดสิ่งหนึ่งในสี่รายการที่ระบุไว้หรือทำไมมันไม่สามารถทำใด ๆ ของพวกเขา เช่น "การห่อหุ้มสามารถทำได้ด้วยการปิด" (หรือถ้าฉันผิดในความเชื่อนี้โปรดระบุสาเหตุ)

6
ภาษาโปรแกรมสำหรับการใช้งานฟังก์ชั่นล้วนจัดการโดยไม่มีคำสั่งมอบหมายได้อย่างไร
เมื่ออ่าน SICP ที่มีชื่อเสียงฉันพบว่าผู้เขียนค่อนข้างลังเลที่จะแนะนำคำสั่งมอบหมายให้ Scheme ในบทที่ 3 ฉันอ่านข้อความและเข้าใจว่าทำไมพวกเขาถึงรู้สึกเช่นนั้น เนื่องจาก Scheme เป็นภาษาโปรแกรมภาษาแรกที่ใช้งานได้ฉันรู้อะไรบางอย่างฉันรู้สึกประหลาดใจที่มีภาษาโปรแกรมบางฟังก์ชั่น (ไม่ใช่แบบแผนของหลักสูตร) ​​สามารถทำได้โดยไม่ได้รับมอบหมาย ขอใช้ตัวอย่างข้อเสนอจากหนังสือbank accountตัวอย่าง หากไม่มีคำแถลงการมอบหมายสิ่งนี้สามารถทำได้อย่างไรจะเปลี่ยนแปลงbalanceตัวแปรได้อย่างไร? ฉันถามเพราะฉันรู้ว่ามีบางภาษาที่เรียกว่าบริสุทธิ์ฟังก์ชั่นออกมีและตามทฤษฎีทัวริงที่สมบูรณ์ก็ต้องทำเช่นนี้ ฉันเรียนรู้ C, Java, Python และใช้การมอบหมายอย่างมากในทุกโปรแกรมที่ฉันเขียน ดังนั้นมันจึงเป็นประสบการณ์ที่เปิดหูเปิดตา ฉันหวังว่าบางคนสามารถอธิบายสั้น ๆ ได้ว่าการหลีกเลี่ยงการมอบหมายในภาษาโปรแกรมการทำงานเหล่านั้นและสิ่งที่มีผลกระทบอย่างลึกซึ้ง (ถ้ามี) ในภาษาเหล่านี้ ตัวอย่างดังกล่าวข้างต้นอยู่ที่นี่: (define (make-withdraw balance) (lambda (amount) (if (>= balance amount) (begin (set! balance (- balance amount)) balance) "Insufficient funds"))) นี้มีการเปลี่ยนแปลงโดยbalance สำหรับผมแล้วมันดูมากเช่นวิธีการเรียนการเปลี่ยนแปลงสมาชิกในชั้นเรียนset!balance ดังที่ฉันพูดฉันไม่คุ้นเคยกับภาษาโปรแกรมที่ใช้งานได้ดังนั้นหากฉันพูดอะไรผิดเกี่ยวกับพวกเขารู้สึกอิสระที่จะชี้ให้เห็น

2
การรวบรวมขยะในภาษาบริสุทธิ์แตกต่างกันอย่างไร
ในภาษาบริสุทธิ์เช่น Haskell ข้อมูลทั้งหมดจะไม่เปลี่ยนรูปและไม่มีโครงสร้างข้อมูลที่มีอยู่สามารถเปลี่ยนแปลงได้ แต่อย่างใด นอกจากนี้อัลกอริทึมมากมายเกี่ยวกับข้อมูลที่ไม่เปลี่ยนรูปแบบและรูปแบบการเขียนโปรแกรมการทำงานสร้างขยะจำนวนมากตามธรรมชาติ (กลุ่มของmapการสร้างรายการระดับกลางเช่น) นักสะสมขยะใช้กลยุทธ์และเทคนิคใดในการเผชิญกับความบริสุทธิ์ที่ไม่เป็นเช่นนั้น ทำงานได้ดีมากใน GC ของภาษาที่ไม่บริสุทธิ์ซึ่งไม่ได้อยู่ในบริบทที่บริสุทธิ์อะไร ภาษาบริสุทธิ์อื่น ๆ ที่สร้างขึ้นสำหรับ GCs มีปัญหาอะไรบ้าง

5
วิธีการ refactor โปรแกรม OO เป็นหนึ่งทำงานได้อย่างไร
ฉันมีปัญหาในการค้นหาแหล่งข้อมูลเกี่ยวกับวิธีการเขียนโปรแกรมในสไตล์การใช้งาน หัวข้อขั้นสูงที่สุดที่ฉันสามารถหาได้ทางออนไลน์คือการใช้โครงสร้างการพิมพ์เพื่อลดลำดับชั้นของชั้นเรียนลง ส่วนใหญ่เพียงจัดการกับวิธีการใช้แผนที่ / พับ / ลด / ฯลฯ เพื่อแทนที่ลูปที่จำเป็น สิ่งที่ฉันต้องการค้นหาจริงๆคือการสนทนาในเชิงลึกเกี่ยวกับการใช้งาน OOP ของโปรแกรมที่ไม่น่าสนใจข้อ จำกัด และวิธีการปรับโครงสร้างในลักษณะการทำงาน ไม่ใช่แค่อัลกอริธึมหรือโครงสร้างข้อมูล แต่มีบางอย่างที่มีบทบาทและแง่มุมที่แตกต่างกัน - อาจเป็นวิดีโอเกม โดยวิธีที่ฉันได้อ่าน Real-World Function Programming โดย Tomas Petricek แต่ฉันก็อยากได้มากกว่านี้

2
อะไรคือความแตกต่างของเนื้อหาระหว่างวิทยานิพนธ์ของคริสโอกาซากิในปี 1996 และหนังสือ 1999, โครงสร้างข้อมูลที่ใช้งานได้อย่างแท้จริง? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการ4 ปีที่แล้ว ฉันต้องการอ่านโครงสร้างข้อมูลที่ทำงานได้อย่างหมดจด ฉันได้พบวิทยานิพนธ์ (ซึ่งสามารถใช้งานได้อย่างอิสระในรูปแบบ PDF)แต่เห็นว่ามีหนังสือเล่มหนึ่งให้ด้วย ดังนั้นฉันอยากรู้ว่าอะไรคือความแตกต่างระหว่างสองสิ่งพิมพ์นี้

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

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

4
การจัดการข้อยกเว้นสไตล์การทำงาน
ฉันได้รับการบอกว่าในการเขียนโปรแกรมทำงานไม่ควรโยนและ / หรือสังเกตข้อยกเว้น ควรคำนวณการคำนวณที่ผิดพลาดแทนค่าล่าง ในภาษาไพ ธ อน (หรือภาษาอื่นที่ไม่สนับสนุนการเขียนโปรแกรมเชิงฟังก์ชันอย่างสมบูรณ์) เราสามารถส่งคืนNone(หรืออีกทางเลือกหนึ่งที่ถือว่าเป็นค่าที่ต่ำที่สุด แต่Noneไม่ปฏิบัติตามคำจำกัดความอย่างเคร่งครัด) เมื่อใดก็ตามที่บางสิ่งผิดปกติ ดังนั้นหนึ่งจะต้องสังเกตข้อผิดพลาดในสถานที่แรกคือ def fn(*args): try: ... do something except SomeException: return None สิ่งนี้เป็นการละเมิดความบริสุทธิ์หรือไม่ และถ้าเป็นเช่นนั้นหมายความว่าเป็นไปไม่ได้ที่จะจัดการกับข้อผิดพลาดใน Python อย่างแท้จริงหรือไม่? ปรับปรุง ในความคิดเห็นของเขา Eric Lippert ทำให้ฉันนึกถึงอีกวิธีหนึ่งในการรักษาข้อยกเว้นใน FP แม้ว่าฉันจะไม่เคยเห็นแบบนั้นใน Python ในทางปฏิบัติ แต่ฉันก็เล่นกับมันเมื่อฉันศึกษา FP เมื่อปีที่แล้ว optionalฟังก์ชันใด ๆ-decorated จะส่งคืนOptionalค่าซึ่งสามารถว่างได้สำหรับเอาต์พุตปกติเช่นเดียวกับรายการข้อยกเว้นที่ระบุ (ข้อยกเว้นที่ไม่ระบุยังคงสามารถยุติการดำเนินการได้) Carryสร้างการประเมินผลที่ล่าช้าซึ่งแต่ละขั้นตอน (ล่าช้าเรียกฟังก์ชัน) อย่างใดอย่างหนึ่งได้รับการว่างเอาท์พุทจากขั้นตอนก่อนและก็ผ่านมันบนหรือประเมินตัวเองผ่านใหม่Optional ในตอนท้ายของค่าสุดท้ายเป็นเรื่องปกติหรือไม่Optional Emptyนี่คือtry/exceptบล็อกที่ซ่อนอยู่หลังมัณฑนากรดังนั้นข้อยกเว้นที่ระบุสามารถถือได้ว่าเป็นส่วนหนึ่งของลายเซ็นประเภทส่งคืน class Empty: def …

5
วิธีการสร้างแบบจำลองการอ้างอิงแบบวงกลมระหว่างวัตถุที่ไม่เปลี่ยนรูปใน C #?
ในตัวอย่างโค้ดต่อไปนี้เรามีคลาสสำหรับวัตถุที่ไม่เปลี่ยนรูปซึ่งแสดงถึงห้อง ทิศเหนือทิศใต้ทิศตะวันออกและทิศตะวันตกเป็นตัวแทนออกไปสู่ห้องอื่น public sealed class Room { public Room(string name, Room northExit, Room southExit, Room eastExit, Room westExit) { this.Name = name; this.North = northExit; this.South = southExit; this.East = eastExit; this.West = westExit; } public string Name { get; } public Room North { get; } public Room South …

5
ประสิทธิภาพ: การเรียกซ้ำกับการทำซ้ำใน Javascript
ฉันได้อ่านเมื่อเร็ว ๆ นี้บางบทความ (เช่นhttp://dailyjs.com/2012/09/14/functional-programming/ ) เกี่ยวกับลักษณะการทำงานของ Javascript และความสัมพันธ์ระหว่าง Scheme และ Javascript (อันหลังได้รับอิทธิพลจากอันแรกซึ่ง เป็นภาษาที่ใช้งานได้ในขณะที่ลักษณะของ OO นั้นสืบทอดมาจาก Self ซึ่งเป็นภาษาที่ใช้สร้างต้นแบบ อย่างไรก็ตามคำถามของฉันเฉพาะเจาะจงมากขึ้น: ฉันสงสัยว่ามีตัวชี้วัดเกี่ยวกับประสิทธิภาพของการเรียกซ้ำกับการทำซ้ำใน Javascript หรือไม่ ฉันรู้ว่าในบางภาษา (โดยการทำซ้ำการออกแบบมีประสิทธิภาพดีกว่า) ความแตกต่างน้อยที่สุดเพราะล่าม / คอมไพเลอร์แปลงการเรียกซ้ำเป็นการวนซ้ำอย่างไรก็ตามฉันเดาว่านี่อาจไม่ใช่กรณีของ Javascript เพราะอย่างน้อยก็เป็นส่วนที่ใช้งานได้ ภาษา.

3
ทำไมบางภาษาที่ใช้งานจำเป็นต้องใช้หน่วยความจำในการทำธุรกรรมซอฟต์แวร์
ภาษาที่ใช้งานได้ตามคำจำกัดความไม่ควรรักษาตัวแปรสถานะ เหตุใด Haskell, Clojure และอื่น ๆ จึงมีการใช้งานซอฟต์แวร์ transactional memory (STM) มีความขัดแย้งระหว่างสองแนวทางหรือไม่?

6
ในฟังก์ชั่นการเขียนโปรแกรมตัวแปรที่ผันแปรได้ในท้องถิ่นโดยไม่มีผลข้างเคียงใด ๆ ที่ยังถือว่าเป็น“ การปฏิบัติที่ไม่ดี”?
มีตัวแปรท้องถิ่นที่ไม่แน่นอนในฟังก์ชั่นที่ใช้ภายในเท่านั้น (เช่นฟังก์ชั่นไม่มีผลข้างเคียงอย่างน้อยก็ไม่ได้ตั้งใจ) ยังถือว่าเป็น "ไม่ทำงาน"? เช่นในการตรวจสอบรูปแบบหลักสูตร "ฟังก์ชั่นการทำงานกับ Scala" จะถือว่าvarการใช้งานไม่ถูกต้อง คำถามของฉันหากฟังก์ชั่นไม่มีผลข้างเคียงการเขียนโค้ดสไตล์ที่จำเป็นยังคงหมดกำลังใจอยู่หรือ? เช่นแทนที่จะใช้การเรียกซ้ำหางที่มีรูปแบบสะสมมีอะไรผิดปกติกับการทำท้องถิ่นสำหรับวงและการสร้างท้องถิ่นที่ไม่แน่นอนListBufferและเพิ่มไปตราบใดที่การป้อนข้อมูลที่ไม่ได้มีการเปลี่ยนแปลงอย่างไร หากคำตอบคือ "ใช่พวกเขาจะหมดกำลังใจเสมอแม้ว่าจะไม่มีผลข้างเคียง" แล้วอะไรคือเหตุผล?

5
กระบวนทัศน์การเขียนโปรแกรมเชิงวัตถุนั้นล้าสมัยเนื่องจากต่อต้านแบบแยกส่วนและแบบขนานหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันได้อ่านบทความโต้เถียงการสอน FP ให้กับนักศึกษาที่โพสต์โดย Robert Harper ผู้เป็นศาสตราจารย์ในมหาวิทยาลัยเชียงใหม่ เขาอ้างว่า CMU จะไม่สอนการเขียนโปรแกรมเชิงวัตถุอีกต่อไปในหลักสูตรเบื้องต้นเพราะมันไม่เหมาะสมสำหรับหลักสูตร CS สมัยใหม่ และเขาอ้างว่า: การเขียนโปรแกรมเชิงวัตถุจะถูกลบออกจากหลักสูตรการแนะนำเพราะมันเป็นทั้งแบบแยกส่วนและต่อต้านแบบขนานโดยธรรมชาติ เหตุใดจึงต้องพิจารณาว่า OOP เป็นแบบแยกส่วนและป้องกันแบบขนาน?

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