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

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

15
ประโยชน์ของแกงกะหรี่คืออะไร?
ฉันเพิ่งเรียนรู้เกี่ยวกับการแกงและในขณะที่ฉันคิดว่าฉันเข้าใจแนวคิดฉันไม่เห็นประโยชน์ใหญ่หลวงใด ๆ ในการใช้มัน เป็นตัวอย่างเล็ก ๆ น้อย ๆ ฉันใช้ฟังก์ชั่นที่เพิ่มสองค่า (เขียนเป็น ML) รุ่นที่ไม่มีการปิดบังจะเป็น fun add(x, y) = x + y และจะเรียกว่าเป็น add(3, 5) ในขณะที่เวอร์ชันแกงกะหรี่คือ fun add x y = x + y (* short for val add = fn x => fn y=> x + y *) และจะเรียกว่าเป็น add 3 5 มันดูเหมือนว่าฉันจะเป็นเพียงน้ำตาล …

5
ฉันก็ 'ฉลาด' เหมือนกันที่จูเนียร์ devs สามารถอ่านได้หรือไม่? การเขียนโปรแกรมที่ใช้งานได้มากเกินไปใน JS ของฉัน? [ปิด]
ฉันเป็นนักพัฒนาซอฟต์แวร์ระดับสูงที่เข้ารหัสใน Babel ES6 ส่วนหนึ่งของแอปของเราทำการเรียก API และตามแบบจำลองข้อมูลที่เราได้รับกลับมาจากการเรียก API ต้องกรอกแบบฟอร์มบางอย่าง แบบฟอร์มเหล่านั้นจะถูกเก็บไว้ในรายการที่เชื่อมโยงเป็นสองเท่า (ถ้าส่วนหลังระบุว่าข้อมูลบางอย่างไม่ถูกต้องเราสามารถนำผู้ใช้กลับไปที่หน้าหนึ่งที่พวกเขาทำผิดพลาดได้อย่างรวดเร็วแล้วนำกลับมาที่เป้าหมาย รายการ.) อย่างไรก็ตามมีฟังก์ชั่นมากมายที่ใช้ในการเพิ่มหน้าและฉันสงสัยว่าตัวเองฉลาดเกินไปหรือเปล่า นี่เป็นเพียงภาพรวมพื้นฐาน - อัลกอริทึมที่เกิดขึ้นจริงมีความซับซ้อนมากขึ้นโดยมีหน้าและประเภทหน้าเว็บที่แตกต่างกันมากมาย แต่นี่จะเป็นตัวอย่างให้คุณ นี่คือวิธีที่ฉันคิดว่าโปรแกรมเมอร์มือใหม่จะจัดการกับมัน export const addPages = (apiData) => { let pagesList = new PagesList(); if(apiData.pages.foo){ pagesList.add('foo', apiData.pages.foo){ } if (apiData.pages.arrayOfBars){ let bars = apiData.pages.arrayOfBars; bars.forEach((bar) => { pagesList.add(bar.name, bar.data); }) } if (apiData.pages.customBazes) { let …

3
ทำไม Trampolines ถึงทำงาน
ฉันใช้จาวาสคริปต์ที่ใช้งานได้บางอย่าง ฉันคิดว่าTail-Call Optimisationได้รับการใช้งานแล้ว แต่พอกลับกลายเป็นว่าฉันผิด ดังนั้นฉันเคยสอนตัวเองtrampolining หลังจากอ่านหนังสือเล็กน้อยที่นี่และที่อื่น ๆ ฉันก็สามารถทำให้พื้นฐานและสร้างแทรมโพลีนตัวแรกได้: /*not the fanciest, it's just meant to reenforce that I know what I'm doing.*/ function loopy(x){ if (x<10000000){ return function(){ return loopy(x+1) } }else{ return x; } }; function trampoline(foo){ while(foo && typeof foo === 'function'){ foo = foo(); } return foo; …

2
รูปแบบ“ Free Monad + Interpreter” คืออะไร
ฉันเคยเห็นคนที่พูดถึงFree Monad กับ Interpreterโดยเฉพาะอย่างยิ่งในบริบทของการเข้าถึงข้อมูล รูปแบบนี้คืออะไร? ฉันควรใช้เมื่อใด มันทำงานอย่างไรและฉันจะใช้มันอย่างไร ฉันเข้าใจ (จากโพสต์เช่นนี้ ) ว่ามันเกี่ยวกับการแยกแบบจำลองจากการเข้าถึงข้อมูล มันแตกต่างจากรูปแบบพื้นที่เก็บข้อมูลที่รู้จักกันดีอย่างไร ดูเหมือนว่าพวกเขาจะมีแรงจูงใจที่เหมือนกัน

5
ฟังก์ชั่นการเขียนโปรแกรมเทียบกับ OOP [ปิด]
ฉันได้ยินมาหลายเรื่องเกี่ยวกับการใช้ภาษาที่ใช้งานได้เช่น Haskell เป็นต้น ข้อดีและข้อเสียของการเขียนโปรแกรมเชิงฟังก์ชันกับการเขียนโปรแกรมเชิงวัตถุคืออะไร

8
“ ผลข้างเคียงคืออะไร”
ฉันไม่เข้าใจแนวคิดของผลข้างเคียงอย่างชัดเจน ผลข้างเคียงในการเขียนโปรแกรมคืออะไร? มันขึ้นอยู่กับการเขียนโปรแกรมภาษา มีผลข้างเคียงภายนอกและภายในไหม? โปรดยกตัวอย่างสาเหตุที่สร้างผลข้างเคียง

3
ฟังก์ชั่นชื่ออะไรที่ไม่โต้แย้งและส่งคืนอะไร? [ปิด]
ในjava.util.functionแพ็คเกจของ Java 8 เรามี: ฟังก์ชัน : รับหนึ่งอาร์กิวเมนต์สร้างผลลัพธ์เดียว ผู้บริโภค : รับหนึ่งอาร์กิวเมนต์สร้างอะไรขึ้นมา ผู้จัดจำหน่าย : ไม่ต้องโต้เถียงสร้างผลลัพธ์เดียว ... : กรณีอื่น ๆ ที่จัดการแบบดั้งเดิมอาร์กิวเมนต์ 2 ข้อ ฯลฯ ... แต่ฉันต้องจัดการกับ " ไม่มีข้อโต้แย้งสร้างอะไร " ไม่มีอะไรสำหรับสิ่งนี้java.util.functionnalค่ะ ดังนั้นคำถามคือ: ชื่อ ' ฟังก์ชั่นที่ไม่โต้แย้งและไม่ส่งคืนอะไร '? ใน Java 8 นิยามของมันจะเป็น: @FunctionalInterface public interface InsertANameHere { void execute(); } ผู้บริหารอยู่แล้วและมีวัตถุประสงค์อื่น: " วัตถุที่ดำเนินการส่งงานที่เรียกใช้งานได้ " ลายเซ็นไม่ตรงกัน ( …

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

12
“ ทุกอย่างคือแผนที่” ฉันทำถูกไหม?
ฉันดูคำพูดของสจ็วตเซียร์เซียร์ " คิดในข้อมูล " และนำหนึ่งในแนวคิดจากนั้นเป็นหลักการออกแบบในเกมนี้ที่ฉันทำ ความแตกต่างคือเขาทำงานใน Clojure และฉันทำงานใน JavaScript ฉันเห็นความแตกต่างที่สำคัญระหว่างภาษาของเราในเรื่องนั้น: Clojure เป็นการเขียนโปรแกรมที่ใช้งานง่าย รัฐส่วนใหญ่ไม่เปลี่ยนรูป ฉันใช้ความคิดจากสไลด์ "ทุกอย่างคือแผนที่" (จาก 11 นาที, 6 วินาทีถึง> 29 นาที) บางสิ่งที่เขาพูดคือ: เมื่อใดก็ตามที่คุณเห็นฟังก์ชั่นที่ใช้อาร์กิวเมนต์ 2-3 ข้อคุณสามารถทำให้เป็นกรณีสำหรับเปลี่ยนเป็นแผนที่และเพิ่งผ่านแผนที่มามีข้อดีมากมายดังนี้: คุณไม่ต้องกังวลกับคำสั่งโต้แย้ง คุณไม่ต้องกังวลกับข้อมูลเพิ่มเติมใด ๆ หากมีกุญแจพิเศษนั่นไม่ใช่ความกังวลของเรา พวกเขาไหลผ่านพวกเขาไม่ได้ยุ่ง คุณไม่จำเป็นต้องกำหนดสคีมา ตรงข้ามกับการส่งผ่านวัตถุไม่มีการซ่อนข้อมูล แต่เขาทำให้กรณีที่การซ่อนข้อมูลสามารถทำให้เกิดปัญหาและ overrated: ประสิทธิภาพ ใช้งานง่าย ทันทีที่คุณสื่อสารผ่านเครือข่ายหรือข้ามกระบวนการคุณจะต้องให้ทั้งสองฝ่ายเห็นพ้องกับการแสดงข้อมูลต่อไป นั่นเป็นงานพิเศษที่คุณสามารถข้ามได้ถ้าคุณแค่ทำงานกับข้อมูล ส่วนใหญ่เกี่ยวข้องกับคำถามของฉัน นี่คือ 29 นาทีใน: "ทำให้ฟังก์ชั่นของคุณประกอบได้" นี่คือตัวอย่างโค้ดที่เขาใช้อธิบายแนวคิด: ;; Bad (defn complex-process [] …

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

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

4
การเขียนโปรแกรมที่ใช้งานได้เร็วขึ้นในการมัลติเธรดเพราะฉันเขียนสิ่งต่าง ๆ หรือเพราะสิ่งต่าง ๆ ถูกคอมไพล์แตกต่างกันหรือไม่
ฉันดำดิ่งสู่โลกแห่งการเขียนโปรแกรมที่ใช้งานได้และฉันอ่านต่อไปทุกที่ว่าภาษาที่ใช้งานได้ดีกว่าสำหรับโปรแกรมมัลติเธรด / มัลติคอร์ ผมเข้าใจว่าภาษาทำงานทำสิ่งต่างๆมากมายที่แตกต่างกันเช่นการเรียกซ้ำ , สุ่มตัวเลขฯลฯ แต่ฉันไม่สามารถดูเหมือนจะคิดออกว่า multithreading เร็วในภาษาทำงานเพราะมันรวบรวมแตกต่างกันหรือเพราะฉันเขียนมันแตกต่างกัน ตัวอย่างเช่นฉันได้เขียนโปรแกรมใน Java ซึ่งใช้โปรโตคอลที่แน่นอน ในโปรโตคอลนี้ทั้งสองฝ่ายส่งและรับถึงกันนับพันข้อความพวกเขาเข้ารหัสข้อความเหล่านั้นและส่งพวกเขาอีกครั้ง (และรับพวกเขา) อีกครั้งและอีกครั้ง ตามที่คาดไว้การมัลติเธรดเป็นกุญแจสำคัญเมื่อคุณจัดการในระดับพัน ในโปรแกรมนี้มีการล็อคไม่เกี่ยวข้องกับ ถ้าฉันเขียนโปรแกรมเดียวกันใน Scala (ซึ่งใช้ JVM) การดำเนินการนี้จะเร็วขึ้นหรือไม่ ถ้าใช่ทำไม มันเป็นเพราะสไตล์การเขียนหรือไม่? ถ้าเป็นเพราะสไตล์การเขียนตอนนี้ที่ Java รวมแลมบ์ดานิพจน์แล้วฉันไม่สามารถบรรลุผลลัพธ์เดียวกันโดยใช้ Java กับแลมบ์ดาได้หรือไม่? หรือเร็วกว่านี้เพราะสกาล่าจะรวบรวมสิ่งต่าง ๆ ?

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

4
วัตถุประสงค์ของลูกศรคืออะไร?
ฉันกำลังเรียนรู้การเขียนโปรแกรม functionnal กับ Haskell และฉันพยายามคว้าแนวคิดโดยการทำความเข้าใจก่อนว่าทำไมฉันถึงต้องการมัน ฉันต้องการทราบเป้าหมายของลูกศรในภาษาโปรแกรมที่ใช้งานได้ พวกเขาแก้ปัญหาอะไร ฉันจะตรวจสอบhttp://en.wikibooks.org/wiki/Haskell/Understanding_arrowsและhttp://www.cse.chalmers.se/~rjmh/afp-arrows.pdf ทั้งหมดที่ฉันเข้าใจคือพวกเขาใช้เพื่ออธิบายกราฟสำหรับการคำนวณและพวกเขาอนุญาตให้เขียนโค้ดในรูปแบบจุดฟรีได้ง่ายขึ้น บทความสมมติว่าสไตล์ฟรีพอยต์นั้นโดยทั่วไปง่ายต่อการเข้าใจและเขียน ดูเหมือนว่าฉันจะคิดแบบนี้ ในบทความอื่น ( http://en.wikibooks.org/wiki/Haskell/StephensArrowTutorial#Hangman:_Main_program ) มีการนำเกมแฮงก์แมนมาใช้ แต่ฉันไม่เห็นว่าลูกศรทำให้การติดตั้งนี้เป็นธรรมชาติอย่างไร ฉันสามารถหาเอกสารจำนวนมากที่อธิบายแนวคิด แต่ไม่มีอะไรเกี่ยวกับแรงจูงใจ ฉันกำลังคิดถึงอะไร

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

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