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

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

3
อะไรคือความแตกต่างที่ใหญ่ที่สุดระหว่าง F # และ Scala?
F # และ Scala เป็นทั้ง langugages โปรแกรมการทำงานที่ไม่ได้บังคับให้นักพัฒนาใช้เฉพาะประเภทข้อมูลที่ไม่เปลี่ยนรูป พวกเขาทั้งสองมีการสนับสนุนวัตถุสามารถใช้ไลบรารีที่เขียนในภาษาอื่นและเรียกใช้บนเครื่องเสมือน ดูเหมือนว่าทั้งสองภาษาจะใช้ ML อะไรคือความแตกต่างที่ยิ่งใหญ่ที่สุดระหว่าง F # และ Scala แม้ว่าข้อเท็จจริงที่ว่า F # ได้รับการออกแบบสำหรับ. NET และ Scala สำหรับแพลตฟอร์ม Java?

10
เหตุใดโปรแกรมจึงใช้การปิด
หลังจากอ่านโพสต์มากมายที่อธิบายการปิดที่นี่ฉันยังขาดแนวคิดหลัก: ทำไมต้องเขียนการปิด โปรแกรมเมอร์คนใดที่จะทำหน้าที่เฉพาะเจาะจงซึ่งอาจได้รับผลงานที่ดีที่สุดโดยการปิดงาน? ตัวอย่างของการปิดใน Swift เป็นการเข้าถึงของ NSUrl และการใช้ Reverse Geocoder นี่คือตัวอย่างหนึ่ง น่าเสียดายที่หลักสูตรเหล่านั้นเพิ่งจะปิดตัวลง พวกเขาไม่ได้อธิบายว่าทำไมการเขียนโค้ดจึงเป็นการปิด ตัวอย่างของปัญหาการเขียนโปรแกรมในโลกแห่งความจริงที่อาจทำให้สมองของฉันพูดว่า "อ้าฉันควรเขียนเรื่องนี้ให้จบ" จะให้ข้อมูลมากกว่าการอภิปรายเชิงทฤษฎี ไม่มีการขาดแคลนของการอภิปรายทางทฤษฎีที่มีอยู่ในเว็บไซต์นี้

3
แลมบ์ดาคืออะไรและทำไมจึงมีประโยชน์ [ปิด]
จนถึงตอนนี้ฉันได้ยินเกี่ยวกับ: แลมบ์ดาแคลคูลัส การเขียนโปรแกรมแลมบ์ดา นิพจน์แลมบ์ดา ฟังก์ชั่นแลมบ์ดา ซึ่งดูเหมือนว่าทั้งหมดจะเกี่ยวข้องกับการเขียนโปรแกรมการทำงาน ... เห็นได้ชัดว่ามันจะถูกรวมเข้ากับ C ++ 1x ดังนั้นฉันอาจเข้าใจได้ดีขึ้นในตอนนี้: http://en.wikipedia.org/wiki/C%2B%2B0x#Lambda_functions_and_expressions ใครบางคนสามารถกำหนดสิ่ง lambdas สิ่งสั้น ๆ และให้ที่มันจะมีประโยชน์?

6
อะไรคือความแตกต่างระหว่างฟังก์ชั่นและแลมบ์ดา?
ฉันสับสนเล็กน้อยเกี่ยวกับ 'ฟังก์ชั่น' และ 'แลมบ์ดา' ฉันเคยเห็นตัวอย่างบางส่วนที่แสดงว่าคำหลักแบบแผนlambdaทำงานคล้ายกับคำหลัก JavaScript functionแต่ฉันไม่รู้ว่าเกี่ยวข้องกันอย่างไร ฉันบอกว่า 'function' และ 'method' สามารถใช้แทนกันได้เมื่อพูดถึงวัตถุใน. net ฉันสงสัยว่า 'แลมบ์ดา' และ 'ฟังก์ชั่น' ในทำนองเดียวกันหมายถึงสิ่งเดียวกัน ฉันสงสัยว่า 'แลมบ์ดา' มีความหมายลึกลับบางอย่างหรือไม่เนื่องจากเห็นว่าตัวอักษรกรีกแลมบ์ดา (λ) ปรากฏในอวตารมากมายในไซต์นี้ ในการทำให้สิ่งต่าง ๆ สับสนมากขึ้นใน. net ส่วนการทำงานของ C # หมายถึงนิพจน์ฟังก์ชันที่ส่งผ่านไปยังฟังก์ชันอื่นเป็น 'แลมบ์ดานิพจน์' ดังนั้นคำนี้ดูเหมือนจะอยู่ทั่วทุกแห่ง ฉันยังคุ้นเคยกับคำว่า 'lambda แคลคูลัส' ด้วย อะไรคือความแตกต่างระหว่างฟังก์ชั่นและแลมบ์ดา?

12
ภาษาการเขียนโปรแกรมใดที่สร้างบั๊กที่หายากได้น้อยที่สุด? [ปิด]
ในความเห็นของคุณว่าภาษาใดที่อนุญาตให้โปรแกรมเมอร์โดยเฉลี่ยให้คุณสมบัติการส่งออกที่มีข้อบกพร่องที่ยากต่อการค้นหาน้อยที่สุด? แน่นอนว่าเป็นคำถามที่กว้างมากและฉันสนใจคำตอบและภูมิปัญญาที่กว้างและกว้างมาก โดยส่วนตัวฉันพบว่าฉันใช้เวลาน้อยมากในการค้นหาข้อผิดพลาดที่แปลกประหลาดในโปรแกรม Java และ C # ในขณะที่รหัส C ++ มีชุดข้อผิดพลาดที่เกิดซ้ำและ Python / คล้ายคลึงกันมีชุดของตัวเองของข้อผิดพลาดทั่วไปและโง่ ๆ ในภาษาอื่น ๆ นอกจากนี้ฉันคิดว่ามันยากที่จะพิจารณาภาษาที่ใช้งานได้ในเรื่องนี้เพราะฉันไม่เคยเห็นโปรแกรมขนาดใหญ่และซับซ้อนที่เขียนด้วยรหัสการทำงานทั้งหมด โปรดป้อนข้อมูลของคุณ แก้ไข: การชี้แจงข้อผิดพลาดที่หายากโดยพลการอย่างสมบูรณ์: ใช้เวลามากกว่า 15 นาทีในการสร้างซ้ำหรือมากกว่า 1 ชั่วโมงเพื่อค้นหาสาเหตุและการแก้ไข ยกโทษให้ฉันหากนี่เป็นสิ่งที่ซ้ำกัน แต่ฉันไม่พบสิ่งใดในหัวข้อเฉพาะนี้

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

3
Combinators คืออะไรและนำไปใช้กับโครงการการเขียนโปรแกรมอย่างไร (คำอธิบายการปฏิบัติ)
Combinators คืออะไร ฉันกำลังหา: คำอธิบายการปฏิบัติ ตัวอย่างการใช้งาน ตัวอย่างของวิธีการที่ combinators ปรับปรุงคุณภาพ / รหัสทั่วไป ฉันไม่ได้กำลังมองหา: คำอธิบายของ combinators ที่ไม่ได้ช่วยให้ฉันทำงานเสร็จ (เช่น Y-combinator)

14
ทำไมความกระตือรือร้นในปัจจุบันสำหรับ Function Programming? [ปิด]
ฉันได้รับความกระตือรือร้นอย่างมากเกี่ยวกับภาษาการเขียนโปรแกรมที่ใช้งานได้เมื่อไม่นานมานี้เกี่ยวกับ Scala, Clojure และ F # ฉันเพิ่งเริ่มเรียน Haskell เพื่อเรียนรู้กระบวนทัศน์ของ FP ฉันรักมันสนุกจริงๆและเหมาะกับพื้นหลังคณิตศาสตร์ของฉัน แต่มันจะสำคัญหรือไม่ เห็นได้ชัดว่ามันเป็นความคิดใหม่แทบจะไม่ นี่คือคำถามของฉัน: อะไรเป็นสาเหตุของความกระตือรือร้นของ FP เมื่อเร็ว ๆ นี้? เป็นเพียงความเบื่อหน่ายกับ OO หรือมีบางสิ่งบางอย่างเปลี่ยนไปเพื่อให้ FP ต้องการมากกว่าเดิมหรือไม่? สิ่งนี้บ่งบอกถึงอนาคตของ FP หรือไม่ หรือนี่คือแฟชั่นเช่นฐานข้อมูล Object Object หรือไม่ ในคำอื่น ๆ ทุกคนสามารถช่วยให้ฉันเข้าใจว่าสิ่งนี้มาจากไหนและมันอาจจะไปที่ไหน

11
“ ง่ายต่อการให้เหตุผล” - นั่นหมายความว่าอย่างไร [ปิด]
ฉันเคยได้ยินหลายครั้งเมื่อนักพัฒนาซอฟต์แวร์รายอื่นใช้วลีนั้นเพื่อ "โฆษณา" รูปแบบบางอย่างหรือพัฒนาแนวทางปฏิบัติที่ดีที่สุด ส่วนใหญ่วลีนี้จะใช้เมื่อคุณกำลังพูดถึงประโยชน์ของการเขียนโปรแกรมการทำงาน วลี "เหตุผลง่าย ๆ เกี่ยวกับ" ถูกนำมาใช้อย่างที่เป็นอยู่โดยไม่มีคำอธิบายหรือตัวอย่างโค้ด ดังนั้นสำหรับฉันมันจะกลายเป็นเหมือน "buzz" ถัดไปซึ่งเป็นคำที่นักพัฒนา "มีประสบการณ์" ใช้ในการเจรจา คำถาม: คุณสามารถยกตัวอย่างบางส่วนของ "ไม่ง่ายที่จะให้เหตุผลเกี่ยวกับ" ดังนั้นจึงสามารถนำมาเปรียบเทียบกับตัวอย่าง "ง่ายต่อการเหตุผล"

6
วิธีแก้ปัญหาสำหรับข้อยกเว้นที่ตรวจสอบด้วย Java
ฉันขอขอบคุณฟีเจอร์ Java 8 ใหม่มากมายเกี่ยวกับ lambdas และอินเตอร์เฟสเมธอดดีฟอลต์ แต่ฉันยังคงเบื่อกับข้อยกเว้นที่ตรวจสอบ ตัวอย่างเช่นหากฉันต้องการแสดงรายการเขตข้อมูลที่มองเห็นได้ทั้งหมดของวัตถุที่ฉันต้องการจะเขียนสิ่งนี้: Arrays.asList(p.getClass().getFields()).forEach( f -> System.out.println(f.get(p)) ); แต่เนื่องจากgetวิธีการอาจมีข้อยกเว้นการตรวจสอบซึ่งไม่เห็นด้วยกับConsumerสัญญาอินเตอร์เฟซดังนั้นฉันต้องจับข้อยกเว้นนั้นและเขียนรหัสต่อไปนี้: Arrays.asList(p.getClass().getFields()).forEach( f -> { try { System.out.println(f.get(p)); } catch (IllegalArgumentException | IllegalAccessException ex) { throw new RuntimeException(ex); } } ); อย่างไรก็ตามในกรณีส่วนใหญ่ฉันแค่ต้องการยกเว้นจะถูกโยนเป็นRuntimeExceptionและให้โปรแกรมจัดการหรือไม่ยกเว้นโดยไม่มีข้อผิดพลาดในการรวบรวม ดังนั้นฉันต้องการแสดงความคิดเห็นของคุณเกี่ยวกับวิธีแก้ไขปัญหาการโต้เถียงของฉันสำหรับการตรวจสอบข้อยกเว้นที่น่ารำคาญ ด้วยเหตุนี้ฉันจึงสร้างส่วนต่อประสานConsumerCheckException<T>และฟังก์ชั่นยูทิลิตี้rethrow( อัปเดตตามความต้องการของความคิดเห็นของ Doval ) ดังต่อไปนี้: @FunctionalInterface public interface ConsumerCheckException<T>{ void accept(T elem) throws Exception; …

6
การเลือกภาษาโปรแกรมที่ใช้งานได้ [ปิด]
ฉันได้อ่านหลายหัวข้อเกี่ยวกับภาษาการเขียนโปรแกรมการทำงานเมื่อเร็ว ๆ นี้ (เกือบในปีที่ผ่านมาในความเป็นจริง) ฉันต้องการเลือกและเรียนรู้อย่างละเอียดถี่ถ้วน ภาคการศึกษาสุดท้าย [หลักสูตร] ฉันได้รับการแนะนำให้รู้จักกับโครงการ ฉันชอบมัน. ชอบความเรียบง่ายที่สุดของไวยากรณ์หลักการhomoiconicityมาโคร ( ถูกสุขลักษณะและไม่ถูกสุขลักษณะ) n-arity ของขั้นตอน ฯลฯ ปัญหาของ Scheme คือภาษาทางวิชาการ ฉันไม่คิดว่ามันถูกใช้จริงในสภาพแวดล้อมการผลิต ฉันไม่เชื่อว่าเป็นการดีที่มีประวัติย่อของเรา ดังนั้นฉันจึงได้มองหาทางเลือกอื่น ๆ มีหลายคนและพวกเขาทั้งหมดดูเหมือนจะมีระดับความนิยมที่คล้ายกัน ความคิดบางอย่างเกี่ยวกับภาษาการทำงานอื่น ๆ ที่ฉันได้พิจารณา: Clojure: มันฟังดูยอดเยี่ยมเพราะมันสามารถเข้าถึงโลกของ Java ได้มันมุ่งเน้นไปที่ความสามารถในการขยายและการทำงานพร้อมกัน แต่โลกของ Java ไม่ได้อยู่ตรงนี้หรือ ฉันรู้แล้วว่า Java ค่อนข้างดี แต่ควรเพิ่มพลังงานมากขึ้นหรือไม่ขึ้นอยู่กับ JVM Haskell: ดูเหมือนภาษาที่นิยมมาก แต่จากสิ่งที่ฉันได้อ่านมันเป็นภาษาวิชาการอีกด้วย เสียงกระเพื่อม: มันได้รับรอบตั้งแต่ตลอดกาล ดูเหมือนจะมีสิ่งที่ฉันชอบมากที่สุดจาก Scheme มันมีชุมชนใหญ่ สำหรับสิ่งที่ฉัน [คิดว่าฉัน] น่าจะเป็นภาษาโปรแกรมที่ใช้กันอย่างแพร่หลายในอุตสาหกรรม (?) …

2
Alan Kay หมายถึงอะไรโดย“ การมอบหมาย” ในประวัติศาสตร์ยุคแรกของ Smalltalk
ฉันได้อ่านประวัติต้นของสมอลล์ทอล์คและมีการกล่าวถึง "การมอบหมาย" สองสามอย่างซึ่งทำให้ฉันถามความเข้าใจเกี่ยวกับความหมายของมัน: แม้ว่า OOP มาจากแรงจูงใจหลายอย่าง แต่ก็เป็นศูนย์กลาง มาตราส่วนขนาดใหญ่คือการค้นหาโครงร่างโมดูลที่ดีกว่าสำหรับระบบที่ซับซ้อนที่เกี่ยวข้องกับการซ่อนรายละเอียดและมาตราส่วนขนาดเล็กคือการค้นหาการมอบหมายรุ่นที่ยืดหยุ่นมากขึ้นแล้วพยายามกำจัดมันทั้งหมด (จากปี1960-66 - OOP ยุคแรกและแนวคิดการก่อสร้างอื่น ๆ ของอายุหกสิบเศษมาตรา I) สิ่งที่ผมได้จาก Simula ก็คือว่าตอนนี้คุณสามารถใช้ทดแทนการผูกและการมอบหมายกับเป้าหมาย สิ่งสุดท้ายที่คุณต้องการให้โปรแกรมเมอร์ทำคือยุ่งกับสถานะภายในแม้ว่าจะถูกนำเสนอเป็นรูปเป็นร่าง แต่วัตถุที่ควรจะนำเสนอเป็นเว็บไซต์ของพฤติกรรมในระดับสูงที่เหมาะสมมากขึ้นเพื่อใช้เป็นส่วนประกอบแบบไดนามิก (... ) มันเป็นเรื่องที่โชคร้ายที่สิ่งที่เรียกว่า "การเขียนโปรแกรมเชิงวัตถุ" ในทุกวันนี้เป็นเพียงการเขียนโปรแกรมแบบเก่า ๆ โปรแกรมจำนวนมากถูกโหลดด้วยการดำเนินการ "สไตล์การมอบหมาย" ซึ่งขณะนี้ทำโดยขั้นตอนการเชื่อมต่อที่มีราคาแพงกว่า (จากสไตล์ "เชิงวัตถุ"ส่วนที่ IV) ฉันถูกต้องในการตีความเจตนาว่าวัตถุนั้นมีความหมายว่าเป็นส่วนหน้าและวิธีการใด ๆ (หรือ "ข้อความ") ที่มีวัตถุประสงค์เพื่อตั้งค่าตัวแปรอินสแตนซ์บนวัตถุ (เช่น "การมอบหมาย") เป็นการเอาชนะวัตถุประสงค์หรือไม่ การตีความนี้ดูเหมือนจะได้รับการสนับสนุนโดยสองข้อความในภายหลังในหัวข้อที่สี่: เทคนิคสี่อย่างที่ใช้ร่วมกัน - สถานะถาวร, พหุสัณฐาน, การสร้างอินสแตนซ์และวิธีการตามเป้าหมายสำหรับวัตถุ สิ่งเหล่านี้ไม่จำเป็นต้องใช้ "ภาษาเชิงวัตถุ" ซึ่ง ALGOL …

3
เหตุใดโมเดลโดเมน anemic จึงถือว่าไม่ดีใน C # / OOP แต่สำคัญมากใน F # / FP
ในโพสต์บล็อกใน F # เพื่อความสนุกสนานและผลกำไรกล่าวว่า: ในการออกแบบฟังก์ชั่นมันสำคัญมากที่จะแยกพฤติกรรมออกจากข้อมูล ชนิดข้อมูลนั้นง่ายและ "โง่" จากนั้นคุณก็มีฟังก์ชั่นหลายอย่างที่ทำงานกับชนิดข้อมูลเหล่านั้น สิ่งนี้เป็นสิ่งที่ตรงกันข้ามกับการออกแบบเชิงวัตถุที่มีการรวมพฤติกรรมและข้อมูลเข้าด้วยกัน ท้ายที่สุดแล้วนั่นคือสิ่งที่ชั้นเรียน ในความเป็นจริงการออกแบบเชิงวัตถุในความเป็นจริงคุณไม่ควรมี แต่พฤติกรรม - ข้อมูลเป็นส่วนตัวและสามารถเข้าถึงได้ผ่านวิธีการ ในความเป็นจริงอู๊ดไม่ได้มีพฤติกรรมพอรอบประเภทข้อมูลถือเป็นสิ่งที่ไม่ดีและยังมีชื่อ: ความ " รูปแบบโดเมนโลหิตจาง " ระบุว่าใน C # เราดูเหมือนจะยืมต่อจาก F # และพยายามเขียนโค้ดสไตล์การทำงานมากขึ้น ทำไมเราไม่ยืมความคิดในการแยกข้อมูล / พฤติกรรมและคิดว่ามันไม่ดี? มันเป็นเพียงแค่ว่าคำจำกัดความไม่ได้มาพร้อมกับ OOP หรือมีเหตุผลที่เป็นรูปธรรมว่ามันไม่ดีใน C # ที่ด้วยเหตุผลบางอย่างไม่ได้ใช้ใน F # (และในความเป็นจริงจะกลับรายการ)? (หมายเหตุ: ฉันสนใจเป็นพิเศษในความแตกต่างใน C # / F # ที่สามารถเปลี่ยนความคิดเห็นของสิ่งที่ดี / ไม่ดีแทนที่จะเป็นบุคคลที่อาจไม่เห็นด้วยกับความเห็นทั้งในโพสต์บล็อก)

5
คำวิจารณ์ของ IO monad ที่ถูกมองว่าเป็น monad state ที่ปฏิบัติงานบนโลกนี้
IOmonad ใน Haskell มักจะมีการอธิบายเป็น monad รัฐที่รัฐเป็นโลก ดังนั้นค่าของชนิดIO amonad worldState -> (a, worldState)ถูกมองว่าเป็นสิ่งที่ชอบ ก่อนหน้านี้ฉันอ่านบทความ (หรือโพสต์รายการบล็อก / จดหมายข่าว) ที่วิจารณ์มุมมองนี้และให้เหตุผลหลายประการว่าทำไมมันไม่ถูกต้อง แต่ฉันจำไม่ได้ว่าทั้งบทความและเหตุผล มีใครรู้บ้าง แก้ไข:บทความดูเหมือนจะหายไปดังนั้นเริ่มรวบรวมข้อโต้แย้งต่าง ๆ ที่นี่ ฉันเริ่มที่จะทำให้สิ่งต่าง ๆ น่าสนใจยิ่งขึ้น แก้ไข:บทความที่ฉันกำลังมองหาคือการจัดการกับทีมที่น่าอึดอัดใจ: อินพุต / เอาท์พุต monadic, การทำงานพร้อมกัน, ข้อยกเว้นและการโทรภาษาต่างประเทศใน Haskellโดย Simon Peyton Jones (ขอบคุณคำตอบของ TacTics)

2
เหตุใดจึงแสดงรายการโครงสร้างข้อมูลของตัวเลือกในภาษาที่ใช้งานได้
ภาษาที่ใช้งานได้ส่วนใหญ่ใช้รายการที่เชื่อมโยงเป็นโครงสร้างข้อมูลหลักที่ไม่เปลี่ยนแปลง ทำไมจึงมีรายการและไม่ใช่เช่นต้นไม้ ต้นไม้ยังสามารถใช้เส้นทางใหม่และแม้แต่รายการแบบจำลองได้อีกด้วย

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