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

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

4
วิธีการจัดเรียงรายการใน Scala ตามสองฟิลด์?
วิธีการจัดเรียงรายการใน Scala ตามสองฟิลด์ในตัวอย่างนี้ฉันจะจัดเรียงตาม lastName และ firstName? case class Row(var firstName: String, var lastName: String, var city: String) var rows = List(new Row("Oscar", "Wilde", "London"), new Row("Otto", "Swift", "Berlin"), new Row("Carl", "Swift", "Paris"), new Row("Hans", "Swift", "Dublin"), new Row("Hugo", "Swift", "Sligo")) rows.sortBy(_.lastName) ฉันลองสิ่งนี้ rows.sortBy(_.lastName + _.firstName) แต่มันไม่ได้ผล ดังนั้นฉันจึงอยากรู้วิธีแก้ปัญหาที่ดีและง่าย

10
องค์ประกอบของ Haskell (.) กับตัวดำเนินการไปข้างหน้าของ F # (|>)
ใน F # การใช้ตัวดำเนินการเดินหน้าท่อ|>เป็นเรื่องปกติ อย่างไรก็ตามใน Haskell ฉันเคยเห็นแค่การใช้องค์ประกอบของฟังก์ชัน(.)เท่านั้น ฉันเข้าใจว่ามันเกี่ยวข้องกันแต่มีเหตุผลด้านภาษาหรือไม่ที่ไม่ได้ใช้ไพพ์ฟอร์เวิร์ดใน Haskell หรือเป็นอย่างอื่น

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

7
ฟังก์ชั่นแผนที่ใน MATLAB?
ฉันแปลกใจเล็กน้อยที่ MATLAB ไม่มีฟังก์ชั่นแผนที่ดังนั้นฉันจึงแฮ็คเข้าด้วยกันเพราะมันเป็นสิ่งที่ฉันขาดไม่ได้ มีรุ่นที่ดีกว่านี้ไหม มีไลบรารีการเขียนโปรแกรมฟังก์ชันมาตรฐานสำหรับ MATLAB ที่ฉันขาดหายไปหรือไม่? function results = map(f,list) % why doesn't MATLAB have a Map function? results = zeros(1,length(list)); for k = 1:length(list) results(1,k) = f(list(k)); end end การใช้งานจะเป็นเช่น map( @(x)x^2,1:10)

4
ตั้งค่าการดำเนินการ (ยูเนี่ยนจุดตัด) บนอาร์เรย์ Swift?
มีการเรียกไลบรารีมาตรฐานใดบ้างที่ฉันสามารถใช้เพื่อดำเนินการตั้งค่าบนอาร์เรย์สองอาร์เรย์หรือใช้ตรรกะดังกล่าวด้วยตัวเอง (ตามหลักการทำงานและมีประสิทธิภาพมากที่สุด)

4
คุณรู้ได้อย่างไรว่าเมื่อใดควรใช้พับซ้ายและเมื่อใดควรใช้พับขวา?
ฉันทราบดีว่าการพับซ้ายทำให้เกิดต้นไม้ที่เอนไปทางซ้ายและการพับขวาทำให้เกิดต้นไม้ที่เอนไปทางขวา แต่เมื่อฉันเอื้อมไปพับบางครั้งฉันก็พบว่าตัวเองจมอยู่กับความคิดที่ทำให้ปวดหัวโดยพยายามหาว่าพับแบบไหน มีความเหมาะสม ฉันมักจะจบลงด้วยการคลี่คลายปัญหาทั้งหมดและก้าวผ่านการใช้งานฟังก์ชั่นพับตามที่มันใช้กับปัญหาของฉัน สิ่งที่ฉันอยากรู้คือ: มีกฎอะไรบ้างในการพิจารณาว่าจะพับซ้ายหรือพับขวา? ฉันจะตัดสินใจได้อย่างไรว่าจะใช้การพับแบบใดในขณะที่ประสบปัญหา มีตัวอย่างในScala ตามตัวอย่าง (PDF) ของการใช้การพับเพื่อเขียนฟังก์ชันที่เรียกว่าแฟลทเทนซึ่งเชื่อมรายการองค์ประกอบเข้าด้วยกันเป็นรายการเดียว ในกรณีนั้นการพับด้านขวาเป็นทางเลือกที่เหมาะสม (โดยพิจารณาจากวิธีการต่อรายการ) แต่ฉันต้องคิดสักหน่อยกว่าจะได้ข้อสรุปนั้น เนื่องจากการพับเป็นการกระทำทั่วไปในการเขียนโปรแกรม (ฟังก์ชัน) ฉันจึงต้องการตัดสินใจประเภทนี้ได้อย่างรวดเร็วและมั่นใจ มีเคล็ดลับอย่างไร

5
val-mutable กับ var-immutable ใน Scala
มีแนวทางใดบ้างใน Scala เกี่ยวกับเวลาที่จะใช้ val กับคอลเลกชันที่เปลี่ยนแปลงได้กับการใช้ var กับคอลเล็กชันที่ไม่เปลี่ยนรูปหรือไม่ หรือคุณควรมุ่งเป้าไปที่ val ด้วยคอลเลกชันที่ไม่เปลี่ยนรูป? ความจริงที่ว่ามีคอลเลกชันทั้งสองประเภททำให้ฉันมีทางเลือกมากมายและบ่อยครั้งที่ฉันไม่รู้ว่าจะเลือกอย่างไร


9
การเขียนโปรแกรมเชิงฟังก์ชัน - ความไม่เปลี่ยนรูปมีราคาแพงหรือไม่? [ปิด]
ตามที่กล่าวมาในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา คำถามเป็นสองส่วน ประการแรกคือแนวความคิด ต่อไปจะดูคำถามเดียวกันอย่างเป็นรูปธรรมมากขึ้นใน Scala การใช้เฉพาะโครงสร้างข้อมูลที่ไม่เปลี่ยนรูปในภาษาโปรแกรมทำให้การใช้อัลกอริทึม / ลอจิกบางอย่างมีราคาแพงกว่าในทางปฏิบัติหรือไม่? สิ่งนี้นำมาสู่ความจริงที่ว่าการไม่เปลี่ยนรูปเป็นหลักการสำคัญของภาษาที่ใช้งานได้อย่างหมดจด มีปัจจัยอื่น ๆ ที่ส่งผลกระทบนี้หรือไม่? ลองมาเป็นตัวอย่างที่เป็นรูปธรรมมากขึ้น โดยทั่วไปแล้วQuicksortได้รับการสอนและนำไปใช้โดยใช้การดำเนินการที่ไม่แน่นอนบนโครงสร้างข้อมูลในหน่วยความจำ เราจะนำสิ่งดังกล่าวไปใช้อย่างไรในรูปแบบการทำงานที่บริสุทธิ์โดยมีค่าใช้จ่ายในการคำนวณและพื้นที่จัดเก็บที่เทียบเคียงกับเวอร์ชันที่เปลี่ยนแปลง โดยเฉพาะใน Scala ฉันได้รวมเกณฑ์มาตรฐานคร่าวๆไว้ด้านล่าง รายละเอียดเพิ่มเติม: ฉันมาจากพื้นฐานการเขียนโปรแกรมที่จำเป็น (C ++, Java) ฉันได้สำรวจการเขียนโปรแกรมเชิงฟังก์ชันโดยเฉพาะ Scala หลักการหลักบางประการของการเขียนโปรแกรมเชิงฟังก์ชัน: หน้าที่เป็นพลเมืองชั้นหนึ่ง ฟังก์ชั่นไม่ได้มีผลข้างเคียงและด้วยเหตุนี้วัตถุโครงสร้างข้อมูล / มีไม่เปลี่ยนรูป แม้ว่าJVMสมัยใหม่จะมีประสิทธิภาพอย่างมากในการสร้างวัตถุและการรวบรวมขยะมีราคาไม่แพงมากสำหรับวัตถุที่มีอายุสั้น แต่ก็ยังดีกว่าที่จะลดการสร้างวัตถุใช่ไหม อย่างน้อยที่สุดในแอปพลิเคชันเธรดเดียวที่การทำงานพร้อมกันและการล็อกไม่ใช่ปัญหา เนื่องจาก Scala เป็นกระบวนทัศน์แบบไฮบริดเราจึงสามารถเลือกที่จะเขียนโค้ดที่จำเป็นกับวัตถุที่เปลี่ยนแปลงได้หากจำเป็น แต่ในฐานะคนที่ใช้เวลาหลายปีในการพยายามใช้วัตถุซ้ำและลดการจัดสรรให้น้อยที่สุด ฉันต้องการความเข้าใจที่ดีเกี่ยวกับโรงเรียนแห่งความคิดที่ไม่ยอมให้เป็นเช่นนั้น ในกรณีที่เฉพาะเจาะจงฉันรู้สึกประหลาดใจเล็กน้อยกับข้อมูลโค้ดในบทช่วยสอน 6นี้ มี Quicksort เวอร์ชัน …

10
อะไรคือความเท่าเทียมที่น่าสนใจที่สุดที่เกิดจาก Curry-Howard Isomorphism?
ฉันได้พบกับCurry-Howard Isomorphismในช่วงชีวิตการเขียนโปรแกรมของฉันค่อนข้างช้าและบางทีสิ่งนี้อาจทำให้ฉันรู้สึกทึ่งกับมันมาก มันหมายความว่าสำหรับทุกแนวคิดการเขียนโปรแกรมมีอะนาล็อกที่แม่นยำในตรรกะที่เป็นทางการและในทางกลับกัน นี่คือรายการ "พื้นฐาน" ของการเปรียบเทียบดังกล่าวที่อยู่เหนือหัวของฉัน: program/definition | proof type/declaration | proposition inhabited type | theorem/lemma function | implication function argument | hypothesis/antecedent function result | conclusion/consequent function application | modus ponens recursion | induction identity function | tautology non-terminating function | absurdity/contradiction tuple | conjunction (and) disjoint union | …

6
อะไรคือ ES6 เทียบเท่ากับ Python 'enumerate' สำหรับลำดับ
Python มีฟังก์ชันในตัวenumerateเพื่อให้ได้(index, item)คู่ที่ทำซ้ำได้ ES6 มีค่าเทียบเท่าสำหรับอาร์เรย์หรือไม่ มันคืออะไร? def elements_with_index(elements): modified_elements = [] for i, element in enumerate(elements): modified_elements.append("%d:%s" % (i, element)) return modified_elements print(elements_with_index(["a","b"])) #['0:a', '1:b'] เทียบเท่า ES6 โดยไม่มีenumerate: function elements_with_index(elements){ return elements.map(element => elements.indexOf(element) + ':' + element); } console.log(elements_with_index(['a','b'])) //[ '0:a', '1:b' ]

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

1
ทำไมนิทานพื้นบ้านกับรามดาจึงแตกต่างกัน?
ฉันเรียนรู้ FP JavaScript โดยการอ่าน DrBoolean ของหนังสือ ฉันค้นหาห้องสมุดโปรแกรมการทำงาน พบรามดาและนิทานพื้นบ้าน ทั้งสองอ้างว่าเป็นไลบรารีการเขียนโปรแกรมที่ใช้งานได้ แต่แตกต่างกันมาก: Ramdaดูเหมือนจะมีฟังก์ชั่นยูทิลิตี้สำหรับจัดการกับ list: map, reduction , filter และ pure functions: curry, compose มันไม่มีอะไรที่ต้องจัดการกับ monad, functor อย่างไรก็ตามนิทานพื้นบ้านไม่มียูทิลิตี้สำหรับรายการหรือฟังก์ชันใด ๆ ดูเหมือนว่าจะใช้โครงสร้างพีชคณิตบางอย่างในจาวาสคริปต์เช่น monad: Maybe, Task ... อันที่จริงฉันพบห้องสมุดมากกว่านี้ดูเหมือนทั้งหมดจะอยู่ในสองหมวดหมู่ ขีดล่างและ lodash เหมือน Ramda Fantasy-land, pointfree-fantasy เป็นเหมือนนิทานพื้นบ้าน ไลบรารีที่แตกต่างกันมากเหล่านี้สามารถเรียกว่าfunctional ได้หรือไม่และถ้าเป็นเช่นนั้นอะไรทำให้แต่ละไลบรารีใช้งานได้

8
การลบองค์ประกอบด้วย Array.map ใน JavaScript
ฉันต้องการกรองอาร์เรย์ของรายการโดยใช้map()ฟังก์ชัน นี่คือข้อมูลโค้ด: var filteredItems = items.map(function(item) { if( ...some condition... ) { return item; } }); ปัญหาคือการกรองรายการยังคงใช้พื้นที่ในอาร์เรย์และฉันต้องการล้างออกทั้งหมด ความคิดใด ๆ ? แก้ไข: ขอบคุณฉันลืมเกี่ยวกับfilter()สิ่งที่ฉันอยากเป็นจริงแล้วfilter()map() แก้ไข 2: ขอขอบคุณที่ชี้ว่าmap()และfilter()ไม่มีการนำไปใช้ในทุกเบราว์เซอร์แม้ว่าโค้ดเฉพาะของฉันไม่ได้ตั้งใจให้ทำงานในเบราว์เซอร์

4
ความแตกต่างระหว่าง Reduce และ foldLeft / fold ในการเขียนโปรแกรมเชิงฟังก์ชัน (โดยเฉพาะ Scala และ Scala APIs)
ทำไม Scala และเฟรมเวิร์กเช่น Spark และ Scalding จึงมีทั้งสองอย่างreduceและfoldLeft? แล้วอะไรคือความแตกต่างระหว่างreduceและfold?

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