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

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

5
ทำไมการอ่านจากหน่วยความจำไม่ใช่ผลข้างเคียง แต่การอ่านจากไฟล์คืออะไร
อะไรทำให้การอ่านจากหน่วยความจำกระบวนการเป็นการดำเนินการที่แท้จริง สมมติว่าฉันสร้างอาร์เรย์จำนวนเต็ม 100 จำนวนในหน่วยความจำส่วนกลางและนำองค์ประกอบที่ 42 ของอาร์เรย์นี้มา มันไม่ใช่ผลข้างเคียงใช่มั้ย เหตุใดการอ่านอาเรย์จำนวนเต็ม 100 ตัวจากไฟล์จึงมีผลข้างเคียง

2
การใช้หลักการของ Clean Code กับภาษาที่ใช้งานได้
ฉันกำลังอ่านโรเบิร์ตมาร์ตินรหัสสะอาด ฉันคิดว่ามันยอดเยี่ยมและเมื่อเขียนรหัส OO ฉันกำลังเรียนอยู่ในใจ โดยเฉพาะอย่างยิ่งฉันคิดว่าคำแนะนำของเขาในการใช้ฟังก์ชั่นเล็ก ๆ ที่มีชื่อที่มีความหมายทำให้โค้ดของฉันลื่นไหลได้อย่างราบรื่นมากขึ้น สรุปได้ดีที่สุดโดยคำพูดนี้: [W] e ต้องการให้สามารถอ่านโปรแกรมราวกับว่ามันเป็นชุดของย่อหน้า TO แต่ละอันจะอธิบายถึงระดับปัจจุบันของสิ่งที่เป็นนามธรรมและการอ้างอิงที่ตามมาถึงย่อหน้าในระดับถัดไป ( ทำความสะอาดรหัสหน้า 37: "TO วรรค" เป็นย่อหน้าที่เริ่มต้นด้วยประโยคที่เปล่งออกมาใน infinitive "ในการทำ X เราทำตามขั้นตอน Y และ Z" "เพื่อทำ Y เรา ... " ฯลฯ ) ตัวอย่างเช่น: หากต้องการ RenderPageWithSetupsAndTeardowns เราจะตรวจสอบว่าหน้าดังกล่าวเป็นหน้าทดสอบหรือไม่และหากเป็นเช่นนั้นเราได้รวมการตั้งค่าและการฉีกขาดไว้ด้วย ไม่ว่าในกรณีใดเราแสดงผลหน้าเว็บเป็น HTML ฉันยังเขียนรหัสการทำงานสำหรับงานของฉัน ตัวอย่างของมาร์ตินในหนังสืออ่านได้อย่างชัดเจนราวกับว่าเป็นชุดของย่อหน้าและชัดเจนมาก - แต่ฉันไม่แน่ใจว่า "การอ่านเหมือนชุดของย่อหน้า" เป็นคุณสมบัติที่พึงประสงค์สำหรับรหัสการทำงานที่มี . นำตัวอย่างออกจากไลบรารีมาตรฐาน Haskell : maximumBy …

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

1
ข้อเสียของรูปแบบกลางการทำงาน
ฉันกำลังเขียนเครื่องมือเพิ่มประสิทธิภาพสำหรับภาษาที่คล้ายกับ JavaScript และต้องเลือกการแสดงรหัสกลาง ตัวเลือกที่ชัดเจน / ทั่วไปในทุกวันนี้ก็คือStatic Single Assignment (SSA) อย่างไรก็ตามโมเดิร์นคอมไพเลอร์การดำเนินงานใน Cยังกล่าวถึงรูปแบบกลางทำงานซึ่งโดยทั่วไปหมายถึงจะบริสุทธิ์การทำงานสำหรับการแสดงกลาง (บริสุทธิ์ในแง่เดียวของตัวแปรท้องถิ่นข้อมูลกองยังคงไม่แน่นอนและไม่ CPS เพียงตรงไปตรงมาletบล็อกและโทรหาง) และ มีข้อดีบางประการในแง่ของการให้เหตุผลที่ง่ายกว่า สมมุติว่ามันไม่ใช่เกมง่ายๆหรือทุกคนจะใช้การเป็นตัวแทนอยู่แล้วดังนั้นคำถามของฉันคืออะไรรูปแบบการใช้งานกลางที่มีข้อเสียเปรียบเทียบกับ SSA อย่างไร

2
การใช้ข้อมูลประเภทพีชคณิตคืออะไร
ฉันกำลังอ่านเกี่ยวกับประเภทข้อมูลพีชคณิต (ขอบคุณ Richard Minerich ฉันพบคำอธิบายที่ยอดเยี่ยมเกี่ยวกับแนวคิดนี้) ในขณะที่ฉันคิดว่าฉันเข้าใจความคิดประเภทผลรวมและประเภทผลิตภัณฑ์ ฯลฯ สิ่งที่ฉันไม่เข้าใจค่อนข้างมากคือวิธีที่ Algebraic Data Types นั้นมีประโยชน์นอกเหนือจากการระบุการจับคู่รูปแบบ สิ่งอื่น ๆ ที่เราสามารถทำได้ด้วยการจับคู่รูปแบบที่นอกเหนือจาก ADT แก้ไข: ฉันไม่ได้ถามว่านักพัฒนาสามารถทำอะไรกับ ADT ที่ไม่สามารถทำได้กับวัตถุ ฉันกำลังถามว่ามีการดำเนินงานอื่น ๆ ที่ ADT อนุญาตหรือไม่ ตัวอย่างเช่นเราสามารถให้เหตุผลเพิ่มเติมเกี่ยวกับประเภทที่เกี่ยวข้องหากใช้ ADT หรือไม่ ADT อำนวยความสะดวกในการวิเคราะห์ประเภทบางประเภทที่ไม่สามารถทำได้หรือไม่

5
ภาษาที่ใช้งานได้ซึ่งรวบรวมเป็น Dalvik VM ของ Android หรือไม่ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันมีปัญหาซอฟต์แวร์ที่เหมาะกับวิธีการทำงานของการเขียนโปรแกรม แต่ตลาดเป้าหมายจะอยู่ในระบบปฏิบัติการ Android ฉันถามเพราะมีภาษาที่ใช้งานได้ซึ่งคอมไพล์กับ VM ของ Java แต่ Dalvik bytecode! = Java bytecode อีกทางหนึ่งคุณรู้หรือไม่ว่าdxยูทิลิตี้นี้สามารถแปลง.classไฟล์ที่สร้างจากภาษาที่ใช้งานได้เช่น Scala อย่างชาญฉลาดหรือไม่? แก้ไข : เพื่อเพิ่มความเป็นประโยชน์ให้กับชุมชนอีกเล็กน้อยและเพื่อช่วยให้ฉันเลือกได้ดีขึ้นฉันจะแก้ไขคำถามได้หรือไม่ คุณเคยใช้ภาษาอื่นกับ Dalvik บ้างไหม? อันไหน? "gotchas" (ปัญหา) ที่ฉันอาจพบมีอะไรบ้าง ประสิทธิภาพเป็นที่ยอมรับหรือไม่? จากนั้นฉันหมายความว่าแอปพลิเคชันยังคงตอบสนองต่อผู้ใช้ ฉันไม่เคยพัฒนาโทรศัพท์มือถือมาก่อน แต่ฉันโตมากับอุปกรณ์ที่มีข้อ จำกัด และฉันก็ไม่คิดว่าจะมีค่าใช้จ่ายในการใช้ภาษาที่ไม่ได้มาตรฐานกับแพลตฟอร์ม ฉันแค่ต้องรู้ว่าค่าใช้จ่ายนั้นเป็นสิ่งที่ฉันควรจะลองใช้วิธีการของฉันเป็นภาษาเริ่มต้น (เช่นใช้หลักการทำงานในภาษา OOP)

4
ทำไมมันไม่ดีที่จะพึ่งพาการเปลี่ยนแปลงสถานะ?
คำถามนี้เกิดขึ้นจากคำถาม/software/25569/is-haskell-worth-learning โดยทั่วไปจะมีการกล่าวประโยคซ้ำ ๆ กันหลายครั้งเกี่ยวกับวิธีที่ Haskell พัฒนาทักษะการเข้ารหัสของคุณในภาษาอื่นและนอกจากนี้เนื่องจาก Haskell นั้นไร้สัญชาติและนั่นเป็นสิ่งที่ดี ทำไม? ฉันเคยเห็นใครบางคนเปรียบเทียบสิ่งนี้กับการพิมพ์ด้วยมือซ้ายหรืออาจหลับตาสักวันหนึ่งและพึ่งพึ่งการสัมผัส มีอะไรมากกว่านั้นอีกไหม? มันเกี่ยวข้องกับการเข้าถึงหน่วยความจำฮาร์ดแวร์หรืออย่างอื่นซึ่งเป็นผลการดำเนินงานที่ยิ่งใหญ่?

5
ประโยชน์ของการมี "ไม่มีข้อยกเว้นรันไทม์" เช่น Elm เรียกร้องคืออะไร?
บางภาษาอ้างว่ามี "ไม่มีข้อยกเว้นสำหรับรันไทม์" เพื่อเป็นข้อได้เปรียบที่ชัดเจนกว่าภาษาอื่น ๆ ที่มี ฉันสับสนในเรื่องนี้ ข้อยกเว้นรันไทม์เป็นเพียงเครื่องมือเท่าที่ฉันรู้และเมื่อใช้กัน: คุณสามารถสื่อสารสถานะ "สกปรก" (ขว้างที่ข้อมูลที่ไม่คาดคิด) การเพิ่มสแต็กคุณสามารถชี้ไปที่ห่วงโซ่ของข้อผิดพลาด คุณสามารถแยกแยะระหว่างความยุ่งเหยิง (เช่นคืนค่าว่างในการป้อนข้อมูลที่ไม่ถูกต้อง) และการใช้งานที่ไม่ปลอดภัยที่ต้องการความสนใจจากนักพัฒนา (เช่นการโยนข้อยกเว้นในการป้อนข้อมูลที่ไม่ถูกต้อง) คุณสามารถเพิ่มรายละเอียดลงในข้อผิดพลาดของคุณด้วยข้อความข้อยกเว้นที่ให้รายละเอียดที่เป็นประโยชน์เพิ่มเติมช่วยแก้จุดบกพร่อง (ในทางทฤษฎี) ในทางกลับกันฉันพบว่ายากที่จะดีบักซอฟต์แวร์ที่ "กลืน" ข้อยกเว้น เช่น try { myFailingCode(); } catch { // no logs, no crashes, just a dirty state } ดังนั้นคำถามก็คืออะไรคือความได้เปรียบเชิงทฤษฎีที่แข็งแกร่งของการมี "ไม่มีข้อยกเว้นรันไทม์"? ตัวอย่าง https://guide.elm-lang.org/ ไม่มีข้อผิดพลาดรันไทม์ในทางปฏิบัติ ไม่มีค่าว่าง ไม่มีการกำหนดไม่ได้เป็นฟังก์ชั่น

4
API และการเขียนโปรแกรมการทำงาน
จากการเปิดรับ (จำกัด ของฉัน) กับภาษาโปรแกรมที่ใช้งานได้เช่น Clojure ดูเหมือนว่าการห่อหุ้มข้อมูลมีบทบาทสำคัญน้อยกว่า โดยทั่วไปแล้วประเภทเนทีฟประเภทต่าง ๆ เช่นแผนที่หรือชุดเป็นสกุลเงินที่ต้องการใช้แทนข้อมูล นอกจากนี้ข้อมูลนั้นโดยทั่วไปไม่เปลี่ยนรูป ตัวอย่างเช่นนี่เป็นคำพูดที่โด่งดังจาก Rich Hickey of Clojure ที่มีชื่อเสียงในการสัมภาษณ์เกี่ยวกับเรื่องนี้ : Fogus: ตามความคิดนั้น - บางคนประหลาดใจกับความจริงที่ว่า Clojure ไม่ได้มีส่วนร่วมในการซ่อนข้อมูลในประเภท ทำไมคุณถึงตัดสินใจทิ้งการซ่อนข้อมูลไว้? Hickey: ชัดเจนว่า Clojure เน้นการเขียนโปรแกรมให้เป็นนามธรรม ถึงจุดหนึ่งบางคนจะต้องเข้าถึงข้อมูล และหากคุณมีความเห็นว่า "ส่วนตัว" คุณต้องมีแนวคิดเกี่ยวกับสิทธิ์และความน่าเชื่อถือที่สอดคล้องกัน และนั่นเป็นการเพิ่มความซับซ้อนและคุณค่าเพียงเล็กน้อยสร้างความแข็งแกร่งในระบบและมักบังคับให้สิ่งต่าง ๆ อาศัยอยู่ในสถานที่ที่ไม่ควรทำ นี่คือนอกเหนือไปจากการสูญเสียอื่น ๆ ที่เกิดขึ้นเมื่อข้อมูลง่าย ๆ ถูกใส่เข้าไปในชั้นเรียน ในกรณีที่ข้อมูลไม่เปลี่ยนรูปมีอันตรายเล็กน้อยที่สามารถให้การเข้าถึงนอกเหนือจากที่ใครบางคนอาจขึ้นอยู่กับสิ่งที่อาจเปลี่ยนแปลง เอาล่ะคนทำอย่างนั้นตลอดเวลาในชีวิตจริงและเมื่อสิ่งต่าง ๆ เปลี่ยนแปลงพวกเขาก็ปรับตัว และถ้าพวกเขามีเหตุผล พวกเขารู้เมื่อพวกเขาตัดสินใจตามสิ่งที่สามารถเปลี่ยนแปลงได้ว่าพวกเขาจะต้องปรับตัวในอนาคต ดังนั้นจึงเป็นการตัดสินใจในการจัดการความเสี่ยงฉันคิดว่าโปรแกรมเมอร์ควรมีอิสระที่จะทำ หากผู้คนไม่มีความรู้สึกอ่อนไหวต่อความปรารถนาที่จะเขียนโปรแกรมให้เป็นนามธรรมและระมัดระวังในการแต่งงานกับรายละเอียดการดำเนินการพวกเขาจะไม่เป็นโปรแกรมเมอร์ที่ดี มาจากโลกของ OO …

9
อะไรคือข้อโต้แย้งเชิงข้อเท็จจริงที่ดีในการโน้มน้าวให้ผู้บริหารระดับสูงพิจารณาการเขียนโปรแกรมฟังก์ชั่น? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา มีตันของการขัดแย้ง "ทฤษฎี" ทำไมเขียนโปรแกรมการทำงานเป็นความคิดที่ดี (มากเกินไปเพื่อที่จะได้อยู่ในฐานะที่เป็นคำถามเปิดและถูกต้องเพื่อ) อย่างไรก็ตามส่วนใหญ่ของพวกเขาเป็นข้อโต้แย้งที่ทำจากทฤษฎี ("ความสง่างาม" ฯลฯ ... ) หรือมุ่งเป้าไปที่นักพัฒนา ปัญหาคือพวกเขาส่วนใหญ่ไร้ประโยชน์โดยสิ้นเชิงเมื่อเป้าหมายของคนหนึ่งคือการนำเสนอความคิดต่อผู้บริหารระดับสูงของ บริษัท ขนาดใหญ่บางคนไม่ได้เป็นนักพัฒนาและทุกคนก็สนใจเรื่องข้อโต้แย้งทางธุรกิจ : ต้นทุนการจัดการทุนมนุษย์ การส่งมอบผลิตภัณฑ์การบริการลูกค้าและรายได้ เช่นเดียวกับข้อเท็จจริงเชิงปริมาณเกี่ยวกับจุดทางทฤษฎีที่ไม่สามารถสำรองด้วยข้อเท็จจริง มีข้อโต้แย้งที่น่าสนใจที่จะนำเสนอเพื่อแก้ไขข้อกังวลทางธุรกิจเหล่านั้นเท่าที่จะพิจารณาการยอมรับการเขียนโปรแกรมฟังก์ชั่นเป็นแนวคิด (ไม่ใช่ภาษาใด ๆ ที่เฉพาะเจาะจง) กับการผสมผสานทั่วไปของขั้นตอน / OOP เช่น Java / C ++ / (Perl | Python) . โดยเฉพาะอย่างยิ่งฉันกำลังมองหาข้อโต้แย้งที่มีปริมาณและ / หรืออยู่บนพื้นฐานของการวิจัยหรือกรณีศึกษา เช่น "จากการอ้างอิงนี้อัตราข้อผิดพลาดของระบบมัลติเธรดใน Lisp / F # …

3
หลักการตั้งชื่อสำหรับฟังก์ชั่นการสั่งซื้อที่สูงขึ้น? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว มีแบบแผนการตั้งชื่อสำหรับฟังก์ชันคำสั่งซื้อที่สูงขึ้นหรือไม่? นั่นคือฟังก์ชันที่ส่งคืนฟังก์ชันอื่น ตัวอย่างใน Javascript: function onlyDivisibleBy(div) { // <-- higher order function return function (n) { return n % div === 0; } } var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.filter(onlyDivisibleBy(3)); // [0, 3, 6, 9] …

2
ตัวอย่างของความต่อเนื่องที่ไม่ได้นำไปใช้เป็นขั้นตอนคืออะไร?
การสนทนาที่น่าสนใจเกี่ยวกับความแตกต่างระหว่างการเรียกกลับและการดำเนินการต่อบน SO ได้กระตุ้นคำถามนี้ ตามคำนิยามความต่อเนื่องเป็นตัวแทนของตรรกะที่จำเป็นในการคำนวณให้เสร็จสมบูรณ์ ในภาษาส่วนใหญ่สิ่งนี้แสดงให้เห็นว่าเป็นหนึ่งในขั้นตอนการโต้แย้งที่คุณผ่านสิ่งที่มีค่าต้องการการประมวลผลอย่างต่อเนื่อง ในภาษาที่ใช้งานได้อย่างหมดจด (ที่ทุกฟังก์ชั่นล้วน แต่เป็นพลเมืองชั้นหนึ่ง) ฉันคิดว่าความต่อเนื่องอาจเป็นรูปแบบที่สมบูรณ์ นี่คือท้ายที่สุดแล้วที่ฉันได้เข้าใจถึงการสืบเนื่องถึงจุดนี้มาก่อน อย่างไรก็ตามโลกที่เต็มไปด้วยรัฐ (ถอนหายใจ .. ) และดังนั้นคำจำกัดความทั่วไปไม่จำเป็นต้องให้สถานะโปรแกรมจับภาพต่อเนื่อง - มันต้องการเพียงความตั้งใจ เพื่อช่วยในการทำความเข้าใจฉันสามารถให้ตัวอย่างเป็นภาษาที่ใช้งานได้ซึ่งความต่อเนื่องถูกแสดงออกในรูปแบบที่เป็นนามธรรมมากกว่าฟังก์ชั่นหรือไม่? ฉันรู้ว่า Scheme ช่วยให้คุณสามารถคว้าความต่อเนื่องในปัจจุบันในรูปแบบของคลาส (call / cc) แต่ถึงกระนั้นดูเหมือนว่าขั้นตอนการโต้แย้งหนึ่งที่ส่งผ่านไปยัง call / cc นั้นจะได้รับความต่อเนื่องในปัจจุบันในรูปแบบของอีกแบบหนึ่ง ขั้นตอนการโต้แย้งที่ฟังก์ชั่นการโทร / cc'd สามารถใช้ผลของมัน

5
อะไรคือλx.λf.fx (เช่น reverse Apply) ใน lambda แคลคูลัส? ฟังก์ชั่นที่เกี่ยวข้องมีชื่อมาตรฐานในการเขียนโปรแกรมหรือไม่?
λx.λf.fxในแคลคูลัสแลมบ์ดาคืออะไร? ฟังก์ชั่นที่เกี่ยวข้องมีชื่อมาตรฐานในภาษาโปรแกรมการใช้งานเช่น Haskell หรือไม่? ในการเขียนโปรแกรมเชิงวัตถุมีชื่อปกติสำหรับวิธีการfooที่ใช้ฟังก์ชั่นเป็นอาร์กิวเมนต์เช่นนั้นx.foo(f)จะส่งกลับf(x)?

5
อะไรคือทางเลือกในการตั้งโปรแกรมการทำงานของอินเตอร์เฟส?
หากฉันต้องการตั้งโปรแกรมในรูปแบบ "ฟังก์ชั่น" ฉันจะใช้อะไรแทนอินเตอร์เฟสได้บ้าง? interface IFace { string Name { get; set; } int Id { get; } } class Foo : IFace { ... } อาจจะTuple<>? Tuple<Func<string> /*get_Name*/, Action<String> /*set_Name*/, Func<int> /*get_Id*/> Foo; เหตุผลเดียวที่ฉันใช้อินเทอร์เฟซตั้งแต่แรกก็เพราะฉันต้องการให้มีคุณสมบัติ / วิธีการบางอย่างอยู่เสมอ แก้ไข:รายละเอียดเพิ่มเติมบางอย่างเกี่ยวกับสิ่งที่ฉันคิด / พยายาม บอกว่าฉันมีวิธีที่ใช้สามฟังก์ชั่น: static class Blarf { public static void DoSomething(Func<string> getName, Action<string> …

4
Groovy เรียกแอปพลิเคชั่นบางส่วนว่า 'currying' หรือไม่?
Groovy มีแนวคิดที่เรียกว่า 'currying' นี่คือตัวอย่างจากวิกิ: def divide = { a, b -> a / b } def halver = divide.rcurry(2) assert halver(8) == 4 ความเข้าใจของฉันเกี่ยวกับสิ่งที่เกิดขึ้นที่นี่ก็คือการโต้แย้งทางด้านขวาของdivideถูกผูกไว้กับค่า 2 ดูเหมือนว่ารูปแบบของการใช้งานบางส่วน คำว่า currying มักจะใช้เพื่อหมายถึงการเปลี่ยนฟังก์ชั่นที่นำชุดของข้อโต้แย้งเป็นฟังก์ชั่นที่ใช้เพียงหนึ่งอาร์กิวเมนต์และส่งกลับฟังก์ชั่นอื่น ตัวอย่างเช่นนี่คือประเภทของcurryฟังก์ชั่นใน Haskell: curry :: ((a, b) -> c) -> (a -> (b -> c)) สำหรับคนที่ไม่ได้ใช้ Haskell a, bและcพารามิเตอร์ทั่วไปทั้งหมด curryใช้เวลาฟังก์ชั่นที่มีสองข้อโต้แย้งและผลตอบแทนฟังก์ชั่นที่ใช้aและผลตอบแทนการทำงานจากการb cฉันได้เพิ่มวงเล็บพิเศษลงในประเภทเพื่อทำให้ชัดเจนยิ่งขึ้น ฉันเข้าใจผิดหรือเปล่าว่าเกิดอะไรขึ้นในตัวอย่างของความแรงหรือเป็นเพียงบางส่วนที่ใช้ผิด? …

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