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

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

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

9
ข้อผิดพลาดในโลกแห่งความเป็นจริงในการแนะนำ F # เข้ากับ codebase ขนาดใหญ่และทีมวิศวกร [ปิด]
ฉันเป็น CTO ของ บริษัท ซอฟต์แวร์ที่มี codebase ขนาดใหญ่ (ทั้งหมด C #) และทีมวิศวกรขนาดใหญ่ ฉันสามารถดูได้ว่าส่วนต่าง ๆ ของรหัสจะง่ายกว่าในการเขียนใน F # ทำให้เกิดเวลาในการพัฒนาที่เร็วขึ้นข้อผิดพลาดที่น้อยลงการใช้งานแบบขนานที่ง่ายขึ้น ฯลฯ โดยทั่วไปแล้วการเพิ่มผลิตผลโดยรวมสำหรับทีมของฉัน อย่างไรก็ตามฉันยังสามารถเห็นข้อผิดพลาดในการทำงานหลายประการของการแนะนำ F # ได้แก่ : 1) ทุกคนต้องเรียนรู้ F # และมันไม่สำคัญเหมือนการเปลี่ยนจากพูด Java เป็น C # สมาชิกในทีมที่ไม่ได้เรียนรู้ F # จะไม่สามารถทำงานในส่วน F # ของ codebase 2) กลุ่มของโปรแกรมเมอร์ F # ที่จ้างได้ ณ ขณะนี้ (ธ.ค. 2010) …

7
อะไรคือสิ่งที่เทียบเท่าการทำงานของคำสั่งทำลายความจำเป็นและการตรวจสอบวงอื่น ๆ ?
สมมติว่าฉันเป็นตรรกะด้านล่าง วิธีการเขียนในฟังก์ชั่นการเขียนโปรแกรม? public int doSomeCalc(int[] array) { int answer = 0; if(array!=null) { for(int e: array) { answer += e; if(answer == 10) break; if(answer == 150) answer += 100; } } return answer; } ตัวอย่างในบล็อกบทความส่วนใหญ่ ... ฉันเห็นเพียงแค่อธิบายกรณีง่าย ๆ ของฟังก์ชันทางคณิตศาสตร์ตรงไปข้างหน้าหนึ่งคำว่า 'ผลรวม' แต่ฉันมีเหตุผลคล้ายกับที่เขียนไว้ข้างต้นใน Java และต้องการย้ายที่ไปยังรหัสการทำงานใน Clojure หากเราไม่สามารถทำตามข้างต้นใน FP ดังนั้นการส่งเสริมการขายประเภท FP ไม่ได้ระบุไว้อย่างชัดเจน …

2
เหตุใดคณะกรรมการ Haskell จึงเลือกพระเพื่อเป็นตัวแทน I / O
สะอาดภาษาใช้ประเภทเอกลักษณ์ในการจัดการ I / O ในการตั้งค่าการทำงานได้อย่างหมดจด ไม่คณะกรรมการ Haskell ไปกับทำไมmonadsแทน? มีข้อเสนออื่น ๆ สำหรับการจัดการสถานะที่คณะกรรมการตรวจสอบ แต่ตัดสินใจกับ? หมายเหตุ : ฉันไม่ได้มองหาสงครามศักดิ์สิทธิ์ระหว่างพระและคอมพิวเตอร์ในรูปแบบอื่น ๆ มาติดตามเรื่องการเลือกของคณะกรรมการเกี่ยวกับ I / O

12
Scheme vs Haskell สำหรับการแนะนำการเขียนโปรแกรมเชิงฟังก์ชั่น?
ฉันพอใจกับการเขียนโปรแกรมใน C และ C # และจะสำรวจ C ++ ในอนาคต ฉันอาจมีความสนใจในการสำรวจการเขียนโปรแกรมการทำงานเป็นกระบวนทัศน์การเขียนโปรแกรมที่แตกต่างกัน ฉันกำลังทำสิ่งนี้เพื่อความสนุกงานของฉันไม่ได้เกี่ยวข้องกับการเขียนโปรแกรมคอมพิวเตอร์และฉันได้รับแรงบันดาลใจจากการใช้งานการเขียนโปรแกรมการสอนค่อนข้างเร็วในหลักสูตรวิทยาศาสตร์คอมพิวเตอร์ในวิทยาลัย แคลคูลัสแลมบ์ดานั้นเกินความสามารถทางคณิตศาสตร์ของฉันอย่างแน่นอน Haskell หรือ Scheme ใดที่จะทำหน้าที่เป็นบทนำที่ดีในการเขียนโปรแกรมการทำงาน ฉันใช้ emacs เป็นเครื่องมือแก้ไขข้อความและต้องการให้สามารถกำหนดค่าได้ง่ายขึ้นในอนาคตซึ่งจะทำให้เกิดการเรียนรู้ Emacs Lisp อย่างไรก็ตามความเข้าใจของฉันคือ Emacs Lisp นั้นค่อนข้างแตกต่างจาก Scheme และยังเป็นขั้นตอนที่มากกว่าการทำงาน ฉันน่าจะใช้หนังสือ "The Little Schemer" ซึ่งฉันได้ซื้อไปแล้วถ้าฉันติดตาม Scheme (ดูเหมือนว่าฉันจะแปลกเล็กน้อยจากการ จำกัด การอ่านผ่าน) หรือจะใช้ "Learn You a Haskell เพื่อสิ่งดีๆ" ถ้าฉันติดตาม Haskell ฉันจะดูวิดีโอแนะนำ Intro ถึง Haskell โดย Dr …

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

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

6
เหตุใดภาษาการเขียนโปรแกรมที่ใช้งานได้บางภาษาจึงใช้พื้นที่สำหรับแอปพลิเคชันฟังก์ชั่น
เมื่อมองไปที่บางภาษาสำหรับการเขียนโปรแกรมการทำงานฉันมักจะสงสัยว่าทำไมบางภาษา fp จึงใช้อักขระช่องว่างอย่างน้อยหนึ่งตัวสำหรับแอปพลิเคชันฟังก์ชัน (และคำจำกัดความ) ในขณะที่ภาษาเชิงวัตถุ / เชิงวัตถุส่วนใหญ่ เป็นวิธีทางคณิตศาสตร์มากขึ้น ฉันคิดว่าสไตล์หลังมีความชัดเจนและอ่านง่ายกว่าที่ไม่มีการเลียนแบบ ดังนั้นถ้าเรามีฟังก์ชั่นf (x) = x²มีสองทางเลือกในการเรียกมันว่า: FP: f x ตัวอย่าง: ML, Ocaml, F # Haskell LISP โครงการ (อย่างใด) Non-FP: f(x) ตัวอย่าง: เกือบทุกภาษาที่จำเป็น (ฉันรู้ว่าเห็นความเห็น / คำตอบ) Erlang Scala (อนุญาตให้ "สัญกรณ์ตัวดำเนินการ" สำหรับอาร์กิวเมนต์เดี่ยว) อะไรคือสาเหตุของการ "ลาออก" วงเล็บคืออะไร?

7
อาจจะเป็นข้อยกเว้น Monad
ฉันสงสัยว่าอะไรคือข้อดีของMaybe monad ที่มีข้อยกเว้น? ดูเหมือนว่าMaybeเป็นวิธีการทางtry..catchไวยากรณ์ที่ชัดเจน (และค่อนข้างใช้พื้นที่มาก) อัปเดตโปรดทราบว่าฉันตั้งใจจะไม่พูดถึง Haskell

5
Javascript เป็นภาษาโปรแกรมใช้งานหรือไม่
Javascript เป็นภาษาที่ใช้งานได้หรือไม่? ฉันรู้ว่ามันมีวัตถุ & คุณสามารถทำ OOP ได้ด้วย แต่มันก็เป็นภาษาที่ใช้งานได้ด้วยวิธีนั้นหรือไม่? คุณรู้ว่า OOP กลายเป็น / ดูเหมือนวิวัฒนาการต่อไปในการเขียนโปรแกรมหมายความว่า 'Functional Programming' เป็นวิวัฒนาการต่อไปอย่างไร (หมายเหตุ: นี่ไม่ใช่พรอมต์สำหรับความเห็น แต่พร้อมรับคำสำหรับหลักฐานตามข้อเท็จจริงและบันทึกนี้คือ มากกว่าสำหรับผู้กลั่นกรองมากกว่าผู้สนับสนุน;) ฉันเรียนรู้ผ่านตัวอย่างที่ดีที่สุดบางทีบางคนอาจแสดงการทำงานเดียวกันในแบบ OOP และในรูปแบบการเขียนโปรแกรมเชิงฟังก์ชั่นเพื่อให้ฉันเข้าใจและเปรียบเทียบการเขียนโปรแกรมการทำงาน ฉันไม่เข้าใจจริงๆว่า 'ฟังก์ชั่นการเขียนโปรแกรม' จริง ๆ แล้ว: P ดังนั้นการเปรียบเทียบ Javascript กับการเขียนโปรแกรมฟังก์ชั่นอาจไม่ถูกต้องทั้งหมด เพื่อนำการเขียนโปรแกรมฟังก์ชั่นในแง่ laymans: มันเป็นเพียงประโยชน์ของ abstration ผ่านการใช้ฟังก์ชั่นที่ไม่ระบุชื่อ? หรือว่าเป็นวิธีที่ง่ายเกินไป? ในวิธีที่เรียบง่าย OOP คือประโยชน์ของนามธรรมผ่านวัตถุ แต่ฉันเชื่อว่ามันง่ายเกินไปที่จะอธิบาย OOP นี่เป็นตัวอย่างที่ดีของการตั้งโปรแกรมการทำงานหรือไม่ ... ตัวอย่าง Javascript OOP: // sum …

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

6
รูปแบบการใช้งานที่ไม่บริสุทธิ์ถือว่าถูกปิดหรือไม่?
การปิดนั้นถือว่าไม่บริสุทธิ์ในฟังก์ชั่นการเขียนโปรแกรมหรือไม่? ดูเหมือนว่าเราสามารถหลีกเลี่ยงการปิดโดยการส่งค่าโดยตรงไปยังฟังก์ชั่น ดังนั้นควรหลีกเลี่ยงการปิดที่เป็นไปได้? หากพวกเขาไม่บริสุทธิ์และฉันถูกต้องในการระบุว่าพวกเขาสามารถหลีกเลี่ยงได้ทำไมภาษาการเขียนโปรแกรมการทำงานจำนวนมากจึงสนับสนุนการปิด? หนึ่งในเกณฑ์ของฟังก์ชั่น pureคือ "ฟังก์ชั่นจะประเมินค่าผลลัพธ์เดียวกันเสมอซึ่งให้ค่าอาร์กิวเมนต์ที่เหมือนกัน" สมมติ f: x -> x + y f(3)จะไม่ให้ผลลัพธ์เดียวกันเสมอ f(3)ขึ้นอยู่กับค่าของที่ไม่ได้เป็นข้อโต้แย้งของy fดังนั้นจึงfไม่ใช่ฟังก์ชั่นที่บริสุทธิ์ เนื่องจากการปิดทั้งหมดขึ้นอยู่กับค่าที่ไม่ใช่ข้อโต้แย้งมันเป็นไปได้อย่างไรที่การปิดใด ๆ จะบริสุทธิ์ ใช่ในทางทฤษฎีแล้วค่าปิดอาจคงที่ แต่ไม่มีทางรู้ได้ว่าเพียงแค่มองว่าซอร์สโค้ดของฟังก์ชันนั้น ที่ซึ่งสิ่งนี้ทำให้ฉันเป็นว่าฟังก์ชั่นเดียวกันอาจบริสุทธิ์ในสถานการณ์หนึ่ง แต่ไม่บริสุทธิ์ในอีกสถานการณ์หนึ่ง หนึ่งไม่สามารถเสมอตรวจสอบว่าฟังก์ชั่นบริสุทธิ์หรือไม่โดยการศึกษารหัสแหล่งที่มาของ แต่อาจต้องพิจารณาในบริบทของสภาพแวดล้อม ณ จุดที่มันถูกเรียกก่อนที่ความแตกต่างดังกล่าวจะสามารถทำได้ ฉันกำลังคิดเกี่ยวกับสิ่งนี้ถูกต้องหรือไม่

1
ประสิทธิภาพของรหัส ADT ที่มุ่งเน้นการกำหนดเดียวบน CPU ที่ทันสมัย
การทำงานกับข้อมูลที่ไม่เปลี่ยนรูปแบบด้วยการมอบหมายครั้งเดียวมีผลชัดเจนที่ต้องใช้หน่วยความจำมากขึ้นอย่างใดอย่างหนึ่งจะเข้าใจเพราะคุณกำลังสร้างค่าใหม่อย่างต่อเนื่อง(แม้ว่าคอมไพเลอร์ภายใต้ฝาครอบทำเคล็ดลับตัวชี้ แต่ฉันเคยได้ยินสองสามครั้งในขณะนี้ว่าการสูญเสียที่เกิดขึ้นกับประสิทธิภาพนั้นมีมากกว่าเมื่อได้รับประโยชน์จากวิธีการที่ CPU (ตัวควบคุมหน่วยความจำของมันโดยเฉพาะ) สามารถใช้ประโยชน์จากความจริงที่ว่าหน่วยความจำไม่ได้กลายพันธุ์ ฉันหวังว่าจะมีใครซักคนที่จะเข้าใจว่าเรื่องนี้เกิดขึ้นจริงได้อย่างไร (หรือถ้าไม่ใช่) ในความคิดเห็นในโพสต์อื่นถูกกล่าวถึงว่าAbstract Data Types (ADT's) เกี่ยวข้องกับสิ่งนี้ซึ่งทำให้ฉันอยากรู้เพิ่มเติมว่า ADT มีผลเฉพาะวิธีที่ CPU ใช้กับหน่วยความจำอย่างไร อย่างไรก็ตามนี่เป็นสิ่งที่แยกกันส่วนใหญ่ฉันแค่สนใจว่าความบริสุทธิ์ของภาษานั้นมีผลต่อประสิทธิภาพของ CPU และแคช ฯลฯ อย่างไร

3
ภาษาที่ใช้งานได้ทั้งหมดใช้การรวบรวมขยะหรือไม่
มีภาษาที่ใช้งานได้ซึ่งอนุญาตให้ใช้ความหมายของสแต็ก - การทำลายที่กำหนดขึ้นโดยอัตโนมัติเมื่อสิ้นสุดขอบเขตหรือไม่?

7
ฟังก์ชั่นการเขียนโปรแกรมเปรียบเทียบกับ OOP กับคลาส
ฉันได้รับความสนใจในบางแนวคิดของการเขียนโปรแกรมการทำงานเมื่อเร็ว ๆ นี้ ฉันใช้ OOP มาระยะหนึ่งแล้ว ฉันเห็นว่าฉันจะสร้างแอพที่ค่อนข้างซับซ้อนใน OOP ได้อย่างไร แต่ละวัตถุจะรู้วิธีการทำสิ่งที่วัตถุนั้นทำ หรืออะไรก็ได้ที่คลาสพ่อแม่ทำก็เช่นกัน ดังนั้นฉันสามารถบอกPerson().speak()ให้คนพูดได้ แต่ฉันจะทำสิ่งที่คล้ายกันในฟังก์ชั่นการเขียนโปรแกรมได้อย่างไร ฉันเห็นว่าฟังก์ชั่นเป็นรายการชั้นหนึ่ง แต่ฟังก์ชั่นนั้นทำสิ่งหนึ่งที่เฉพาะเจาะจงเท่านั้น ฉันจะมีsay()วิธีการลอยไปรอบ ๆ และเรียกมันว่ามีPerson()ข้อโต้แย้งที่เทียบเท่าเพื่อให้ฉันรู้ว่าสิ่งที่พูดอะไรบางอย่าง? ดังนั้นฉันสามารถเห็นสิ่งต่าง ๆ ง่ายๆฉันจะเปรียบเทียบ OOP และวัตถุในการเขียนโปรแกรมเชิงหน้าที่ได้อย่างไรฉันจึงสามารถทำให้เป็นโมดูลและจัดระเบียบรหัสฐานได้หรือไม่ สำหรับการอ้างอิงประสบการณ์หลักของฉันกับ OOP คือ Python, PHP และ C # บางอย่าง ภาษาที่ฉันกำลังดูที่มีคุณสมบัติการใช้งานคือ Scala และ Haskell แม้ว่าฉันจะเอนไปทางสกาล่า ตัวอย่างพื้นฐาน (Python): Animal(object): def say(self, what): print(what) Dog(Animal): def say(self, what): super().say('dog barks: …

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