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

ฟังก์ชั่นการเขียนโปรแกรมเป็นกระบวนทัศน์การเขียนโปรแกรมตามการสร้าง abstractions โดยใช้ฟังก์ชั่นหลีกเลี่ยงผลข้างเคียงและการเปลี่ยนแปลงของรัฐ การเขียนโปรแกรมใช้งานได้จริงนั้นปลอดภัยต่อเธรด


30
Monad คืออะไร
เมื่อเร็ว ๆ นี้เมื่อดูที่ Haskell สิ่งที่จะเป็นคำอธิบายสั้น ๆ รวบรัดและเป็นประโยชน์เกี่ยวกับสิ่งที่เป็นหลัก monad คืออะไร? ฉันพบว่าคำอธิบายส่วนใหญ่ที่ฉันเจอนั้นไม่สามารถเข้าถึงได้อย่างเป็นธรรมและขาดรายละเอียดในทางปฏิบัติ

18
การเขียนโปรแกรมปฏิกิริยา (ทำงาน) คืออะไร?
ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ผมเคยอ่านบทความวิกิพีเดียในการเขียนโปรแกรมปฏิกิริยา ฉันยังอ่านบทความเล็ก ๆ เกี่ยวกับการเขียนโปรแกรมปฏิกิริยาการทำงาน คำอธิบายค่อนข้างเป็นนามธรรม functional reactive programming (FRP) หมายถึงอะไรในทางปฏิบัติ? การเขียนโปรแกรมเชิงรับ (reactive programming) คืออะไร? ภูมิหลังของฉันอยู่ในความจำเป็น / ภาษา OO ดังนั้นคำอธิบายที่เกี่ยวข้องกับกระบวนทัศน์นี้จะได้รับการชื่นชม

30
ฟังก์ชั่นแผนที่สำหรับวัตถุ (แทนอาร์เรย์)
ฉันมีวัตถุ: myObject = { 'a': 1, 'b': 2, 'c': 3 } ฉันกำลังมองหาวิธีการพื้นเมืองที่คล้ายกับArray.prototype.mapที่จะใช้ดังนี้ newObject = myObject.map(function (value, label) { return value * value; }); // newObject is now { 'a': 1, 'b': 4, 'c': 9 } JavaScript มีmapฟังก์ชั่นดังกล่าวสำหรับวัตถุหรือไม่ (ฉันต้องการสิ่งนี้สำหรับโหนด JS ดังนั้นฉันไม่สนใจปัญหาข้ามเบราว์เซอร์)

28
ฟังก์ชั่นโปรแกรมแทนรูปแบบการออกแบบของ GoF หรือไม่?
ตั้งแต่ฉันเริ่มเรียนรู้F #และOCamlเมื่อปีที่แล้วฉันได้อ่านบทความจำนวนมากที่ยืนยันว่ารูปแบบการออกแบบ (โดยเฉพาะใน Java) เป็นวิธีแก้ปัญหาสำหรับคุณสมบัติที่ขาดหายไปในภาษาที่จำเป็น บทความหนึ่งที่ฉันพบมีการอ้างสิทธิ์ค่อนข้างแรง : คนส่วนใหญ่ที่ฉันพบเจอได้อ่าน หนังสือรูปแบบการออกแบบโดย Gang of Four (GoF) โปรแกรมเมอร์ที่เคารพตนเองจะบอกคุณว่าหนังสือเล่มนี้เป็นผู้ไม่เชื่อเรื่องภาษาและรูปแบบที่ใช้กับวิศวกรรมซอฟต์แวร์โดยทั่วไปไม่ว่าคุณจะใช้ภาษาใด นี่คือการเรียกร้องอันสูงส่ง น่าเสียดายที่มันห่างไกลจากความจริง ภาษาหน้าที่มีความหมายอย่างมาก ในภาษาที่ใช้งานได้เราไม่จำเป็นต้องมีรูปแบบการออกแบบเพราะภาษานั้นมีระดับสูงมากดังนั้นคุณจึงต้องเขียนโปรแกรมในแนวคิดที่กำจัดรูปแบบการออกแบบทั้งหมดเข้าด้วยกัน คุณสมบัติหลักของ functional programming (FP) รวมถึงฟังก์ชั่นเป็นค่าชั้นหนึ่ง, currying, ค่าที่ไม่เปลี่ยนรูปแบบ ฯลฯ ฉันไม่เห็นว่ารูปแบบการออกแบบ OO ใกล้เคียงกับคุณลักษณะใด ๆ เหล่านั้น นอกจากนี้ในภาษาที่ใช้งานได้ซึ่งสนับสนุน OOP (เช่น F # และ OCaml) ดูเหมือนว่าสำหรับฉันแล้วโปรแกรมเมอร์ที่ใช้ภาษาเหล่านี้จะใช้รูปแบบการออกแบบเดียวกันกับภาษา OOP อื่น ๆ อันที่จริงตอนนี้ฉันใช้ F # และ OCaml ทุกวันและไม่มีความแตกต่างที่โดดเด่นระหว่างรูปแบบที่ฉันใช้ในภาษาเหล่านี้กับรูปแบบที่ฉันใช้เมื่อฉันเขียนด้วย Java มีความจริงใด …

30
JavaScript มีวิธีเช่น "range ()" เพื่อสร้างช่วงภายในขอบเขตที่ให้มาหรือไม่?
ใน PHP คุณสามารถทำ ... range(1, 3); // Array(1, 2, 3) range("A", "C"); // Array("A", "B", "C") นั่นคือมีฟังก์ชั่นที่ช่วยให้คุณได้รับช่วงของตัวเลขหรือตัวอักษรโดยผ่านขอบเขตบนและล่าง มีอะไรในตัว JavaScript สำหรับกำเนิดนี้? ถ้าไม่ฉันจะใช้มันอย่างไร?

14
รายการความเข้าใจกับตัวกรองแลมบ์ดา +
ฉันพบว่าตัวเองมีความจำเป็นในการกรองขั้นพื้นฐาน: ฉันมีรายการและฉันต้องกรองตามคุณลักษณะของรายการ รหัสของฉันดูเหมือนว่านี้: my_list = [x for x in my_list if x.attribute == value] แต่ฉันก็คิดว่ามันคงจะดีกว่าถ้าเขียนมันแบบนี้? my_list = filter(lambda x: x.attribute == value, my_list) สามารถอ่านได้มากขึ้นและหากจำเป็นสำหรับการแสดงแลมบ์ดาสามารถนำออกมาเพื่อรับบางสิ่งได้ คำถามคือมีคำเตือนในการใช้วิธีที่สองหรือไม่? มีความแตกต่างด้านประสิทธิภาพหรือไม่ ฉันทำ Pythonic Way ™หายไปทั้งหมดและควรทำในวิธีอื่น (เช่นใช้ itemgetter แทนที่จะเป็นแลมบ์ดา) หรือไม่?

6
ส่วนใดของ Hindley-Milner ที่คุณไม่เข้าใจ
ฉันสาบานว่าเคยเป็นเสื้อยืดขายที่มีคำอมตะ: ส่วนไหนของ คุณไม่เข้าใจเหรอ ในกรณีของฉันคำตอบก็คือ ... ทั้งหมด! โดยเฉพาะอย่างยิ่งฉันมักเห็นสัญกรณ์แบบนี้ในเอกสาร Haskell แต่ฉันก็ไม่รู้ว่ามันหมายถึงอะไร ฉันไม่รู้ว่ามันควรจะเป็นสาขาวิชาคณิตศาสตร์ ฉันรู้จักตัวอักษรของตัวอักษรกรีกแน่นอนและสัญลักษณ์เช่น "∉" (ซึ่งโดยปกติจะหมายถึงสิ่งที่ไม่ใช่องค์ประกอบของชุด) ในทางกลับกันฉันไม่เคยเห็น "⊢" มาก่อน ( Wikipedia อ้างว่าอาจหมายถึง "พาร์ติชัน" ) ฉันไม่คุ้นเคยกับการใช้ vinculum ที่นี่ (มักจะหมายถึงส่วน แต่ที่ไม่ปรากฏจะเป็นกรณีที่นี่.) ถ้าอย่างน้อยก็มีคนบอกฉันได้ว่าจะเริ่มมองหาที่ใดเพื่อเข้าใจความหมายของสัญลักษณ์ทะเลนี้นั่นจะเป็นประโยชน์

11
อะไรคือความแตกต่างระหว่าง 'การปิด' และ 'แลมบ์ดา'?
มีคนอธิบายได้ไหม ฉันเข้าใจแนวคิดพื้นฐานที่อยู่เบื้องหลังพวกเขา แต่ฉันมักจะเห็นพวกเขาใช้สลับกันได้และฉันสับสน และตอนนี้เราอยู่ที่นี่พวกเขาแตกต่างจากฟังก์ชั่นปกติอย่างไร

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

15
เริ่มต้นกับ Haskell
คำตอบของคำถามนี้เป็นความพยายามของชุมชน แก้ไขคำตอบที่มีอยู่เพื่อปรับปรุงโพสต์นี้ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ สองสามวันที่ฉันพยายามล้อมรอบกระบวนทัศน์การเขียนโปรแกรมการทำงานใน Haskell ฉันได้ทำสิ่งนี้โดยการอ่านบทช่วยสอนและดูหน้าจอ screencasts แต่ดูเหมือนว่าไม่มีอะไรจะติด ตอนนี้ในการเรียนรู้ภาษาที่จำเป็นต่างๆ / OO (เช่น C, Java, PHP) การออกกำลังกายเป็นวิธีที่ดีสำหรับฉันที่จะไป แต่เนื่องจากฉันไม่รู้จริง ๆ ว่า Haskell มีความสามารถอะไรและเนื่องจากมีแนวคิดใหม่มากมายที่จะใช้ฉันจึงไม่รู้ว่าจะเริ่มจากตรงไหน ดังนั้นคุณเรียนรู้ Haskell ได้อย่างไร อะไรทำให้คุณ "แตกน้ำแข็ง" จริงๆ? นอกจากนี้ยังมีแนวคิดที่ดีสำหรับการฝึกหัดเริ่มต้นไหม?

19
Monad ในภาษาอังกฤษธรรมดา? (สำหรับโปรแกรมเมอร์ OOP ที่ไม่มีพื้นหลัง FP)
ในแง่ที่โปรแกรมเมอร์ OOP จะเข้าใจ (ไม่มีพื้นหลังการเขียนโปรแกรมการทำงาน) monad คืออะไร? แก้ปัญหาอะไรได้บ้างและสถานที่ที่ใช้บ่อยที่สุดคืออะไร แก้ไข: เพื่อให้เข้าใจถึงชนิดของความเข้าใจที่ฉันกำลังมองหาสมมติว่าคุณกำลังแปลงแอปพลิเคชัน FP ที่มี monads เป็นแอปพลิเคชัน OOP คุณจะทำอย่างไรในการโอนย้ายความรับผิดชอบของพระสงฆ์ไปยังแอป OOP

18
'Currying' คืออะไร
ฉันเคยเห็นการอ้างอิงถึงฟังก์ชั่น curated ในหลายบทความและบล็อก แต่ฉันไม่สามารถหาคำอธิบายที่ดี (หรืออย่างน้อยหนึ่งที่ทำให้รู้สึก!)

13
ฟังก์ชั่นเวลามีอยู่ในการตั้งโปรแกรมการทำงานอย่างไร
ฉันต้องยอมรับว่าฉันไม่รู้เกี่ยวกับการเขียนโปรแกรมฟังก์ชั่นมากนัก ฉันอ่านเกี่ยวกับมันจากที่นี่และที่นั่นและได้รู้ว่าในการเขียนโปรแกรมเชิงฟังก์ชันฟังก์ชั่นจะคืนค่าเอาต์พุตเดียวกันสำหรับอินพุตเดียวกันไม่ว่าจะเรียกใช้ฟังก์ชันกี่ครั้งก็ตาม มันเหมือนกับฟังก์ชันทางคณิตศาสตร์ที่ประเมินผลลัพธ์เดียวกันสำหรับค่าเดียวกันของพารามิเตอร์อินพุตที่เกี่ยวข้องในการแสดงออกของฟังก์ชัน ตัวอย่างเช่นพิจารณาสิ่งนี้: f(x,y) = x*x + y; // It is a mathematical function ไม่ว่าคุณจะใช้ไปกี่ครั้งf(10,4)ก็ตามคุณค่าของมันจะยังคงอยู่ตลอด104ไป ดังนั้นทุกที่ที่คุณเขียนf(10,4)คุณสามารถแทนที่ด้วย104โดยไม่ต้องเปลี่ยนค่าของการแสดงออกทั้งหมด คุณสมบัตินี้เรียกว่าการอ้างอิงโปร่งใสของการแสดงออก ตามที่ Wikipedia พูดว่า ( ลิงค์ ) ในทางกลับกันในฟังก์ชั่นรหัสค่าเอาท์พุทของฟังก์ชั่นขึ้นอยู่กับอาร์กิวเมนต์ที่ใส่เข้าไปในฟังก์ชั่นเท่านั้นดังนั้นการเรียกใช้ฟังก์ชัน f สองครั้งด้วยค่าเดียวกันสำหรับอาร์กิวเมนต์ x จะให้ผลลัพธ์ที่เหมือนกัน f (x) ทั้งสองครั้ง ฟังก์ชั่นเวลา (ซึ่งจะคืนค่าเวลาปัจจุบัน ) สามารถมีอยู่ในการตั้งโปรแกรมการทำงานหรือไม่ ถ้าใช่แล้วมันจะมีอยู่ได้อย่างไร? มันไม่ได้ละเมิดหลักการของฟังก์ชั่นการเขียนโปรแกรมหรือไม่? มันละเมิดความโปร่งใสในการอ้างอิงซึ่งเป็นหนึ่งในคุณสมบัติของการเขียนโปรแกรมการทำงาน (ถ้าฉันเข้าใจถูกต้อง) หรือถ้าไม่, แล้วเราจะรู้เวลาปัจจุบันในการโปรแกรมเชิงฟังก์ชันได้อย่างไร?

8
การออกแบบขนาดใหญ่ใน Haskell [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ปิดให้บริการใน3 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ เป็นวิธีที่ดีในการออกแบบ / โครงสร้างโปรแกรมการทำงานขนาดใหญ่โดยเฉพาะใน Haskell อะไร ฉันได้ผ่านบทเรียนมากมาย (เขียนโครงการด้วยตัวเองเป็นที่ชื่นชอบกับ Real World Haskell ในไม่ช้า) - แต่โปรแกรมส่วนใหญ่มีขนาดค่อนข้างเล็กและมีวัตถุประสงค์เดียว นอกจากนี้ฉันไม่คิดว่าพวกเขาบางคนจะสง่างามเป็นพิเศษ (ตัวอย่างเช่นตารางการค้นหาที่กว้างใหญ่ใน WYAS) ตอนนี้ฉันต้องการเขียนโปรแกรมที่มีขนาดใหญ่ขึ้นด้วยชิ้นส่วนที่เคลื่อนไหวได้มากขึ้น - รับข้อมูลจากแหล่งข้อมูลที่แตกต่างกันมากมายทำความสะอาดประมวลผลในรูปแบบต่าง ๆ แสดงในส่วนติดต่อผู้ใช้ยืนยันมันสื่อสารผ่านเครือข่ายเป็นต้น โครงสร้างที่ดีที่สุดอย่างหนึ่งของรหัสดังกล่าวคืออ่านง่ายบำรุงรักษาและปรับให้เข้ากับความต้องการที่เปลี่ยนแปลงได้หรือไม่ มีวรรณกรรมจำนวนมากตอบคำถามเหล่านี้สำหรับโปรแกรมเชิงวัตถุขนาดใหญ่ แนวคิดเช่น MVC รูปแบบการออกแบบ ฯลฯ เป็นข้อกำหนดที่เหมาะสมสำหรับการตระหนักถึงเป้าหมายในวงกว้างเช่นการแยกความกังวลและการใช้ซ้ำในสไตล์ OO นอกจากนี้ภาษาที่มีความจำเป็นรุ่นใหม่ยังให้ความสำคัญกับรูปแบบ 'การออกแบบเมื่อคุณเติบโต' ซึ่งในความเห็นของฉันสามเณร Haskell ดูเหมือนว่าจะเหมาะสมน้อยกว่า มีวรรณกรรมที่เทียบเท่ากับ Haskell ไหม สวนสัตว์ของโครงสร้างการควบคุมที่แปลกใหม่มีให้ใช้งานในการเขียนโปรแกรมการทำงานอย่างไร (monads, arrow, applicative …

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