การเขียนโปรแกรมเชิงฟังก์ชันนั้นเกี่ยวข้องกับคณิตศาสตร์อย่างมากหรือไม่?


21

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


1
คำถามนี้ถูกแท็กอย่างถูกต้องด้วย mathematica หรือควรเป็นคณิตศาสตร์?

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

คำตอบ:


28

การเขียนโปรแกรมทั้งหมดที่เกี่ยวข้องกับคณิตศาสตร์ แน่นอนว่ามหาวิทยาลัยหลายแห่งยังคงวางหลักสูตรวิทยาการคอมพิวเตอร์ภายใต้ขอบเขตของภาควิชาคณิตศาสตร์

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

ความยากลำบากที่แท้จริงที่ฉันพบในการเลือกภาษาการเขียนโปรแกรมที่ประกาศโดยทั่วไป (ซึ่งการทำงานเป็นส่วนย่อย) คือการยกเลิกการกระตุ้นที่จะควบคุม; เพื่อบอกคอมพิวเตอร์ว่าต้องทำอะไร มันต้องใช้ความคุ้นเคยบ้าง


คำพูดดี +1
Mudassir

4
เมื่อคุณได้รับการเรียนรู้การเขียนโปรแกรม SQL ดีประกาศไม่ยาก

7

ใช่. โดยพื้นฐานแล้วฟังก์ชั่นการใช้งานเป็นพวงของคำสั่งเช่นนั้น:

// 1_ และ 2_ คือ "อาร์กิวเมนต์ดัมมี่" f (1_): = sin (1_) g (1_, 2_): = 1_ + 2_ ฯลฯ ...

x = f ()

y = g (x)

z = h (x, h2 (y))

ฯลฯ ...

คุณกำลังเขียนสิ่งที่โปรแกรมควรทำในรูปแบบของสมการที่กำหนดค่าใหม่ (หมายเหตุ: ไม่ใช่ตัวแปร) เป็นฟังก์ชันของค่าที่กำหนดไว้ก่อนหน้านี้ คุณยังกำหนดหน้าที่ความสัมพันธ์ มันค่อนข้างคล้ายกับวิธีเขียนทฤษฎีบททางคณิตศาสตร์


ฉันสามารถเข้าใจฟังก์ชันทางคณิตศาสตร์ได้ดีกว่า synatx แปลก ๆ ของ Haskell และอื่น ๆ คุณมีลิงค์ใด ๆ ที่เกี่ยวข้องกับขั้นตอนทางคณิตศาสตร์กับไวยากรณ์ของภาษาที่ใช้งานได้หรือไม่
RainDoctor

คำตอบนี้แม่นยำ FP จะเริ่มมีเหตุผลสมบูรณ์แบบเมื่อคุณตระหนักถึง (และ internalize) ว่าคุณกำลังเขียนฟังก์ชั่นทางคณิตศาสตร์และไม่ใช่ขั้นตอนทีละขั้นตอน คนส่วนใหญ่เรียนรู้ขั้นตอนการเขียนโปรแกรมขั้นตอนแรกและสัมภาระนั้นใหญ่ ฉันคิดว่า "ฟังก์ชั่น" ในภาษาเชิงปฏิบัติควรเรียกว่า "ขั้นตอน"
Kakaji

2

IMO Mathematica เป็นตัวอย่างของภาษาที่คุณสามารถใช้การเขียนโปรแกรมเชิงฟังก์ชันได้โดยไม่จำเป็นต้องมีพื้นฐานด้านคณิตศาสตร์ที่แข็งแกร่ง ที่จริงแล้วฉันไม่คิดว่าฉันจะพบอะไรเช่นการเขียนโปรแกรมเพื่อใช้งานในระหว่างการศึกษาคณิตศาสตร์ขั้นพื้นฐานของฉัน ฉันเริ่มต้นการเขียนโปรแกรม Mathematica ที่ทำในรูปแบบ C และค้นพบการเขียนโปรแกรมเชิงหน้าที่เพียงไม่กี่ปีต่อมา ฉันไม่คิดว่าพื้นฐานการเขียนโปรแกรมโครงสร้างการทำงานชอบMap, Apply, NestListฯลฯ จำเป็นต้องมีพื้นหลังคณิตศาสตร์ใด ๆ เลย


1

ไม่ได้จริงๆ ฟังก์ชั่นการเขียนโปรแกรมเป็นเพียงวิธีการ แต่มันมีฐานในแคลคูลัสแลมบ์ดาและสิ่งเช่นนั้น

การปิดคือความพยายาม (ขนาดเล็ก) ในการแนะนำแนวคิดการเขียนโปรแกรมเชิงหน้าที่ในภาษาเชิงปฏิบัติ แทนที่จะเป็นfor(int i =0 ; i < num; i++) doStuff(arr[i]);เช่นนั้นคุณสามารถสันนิษฐานได้ว่าองค์ประกอบของอาเรย์นั้นอาจมีarr.each do |el| doStuff(el) end


10
คุณเป็นแบบอย่างของฟังก์ชั่นที่ไม่ระบุชื่อไม่ใช่การปิด Wikiedpia:The term closure is often mistakenly used to mean anonymous function. This is probably because most languages implementing anonymous functions allow them to form closures and programmers are usually introduced to both concepts at the same time. These are, however, distinct concepts. A closure retains a reference to the environment at the time it was created (for example, to the current value of a local variable in the enclosing scope) while a generic anonymous function need not do this.

1

คำตอบสั้น ๆ คือ: ใช่เพราะทุกอย่างที่มีระดับความเป็นทางการ (เช่นภาษาการเขียนโปรแกรม) มีความสัมพันธ์อย่างมากกับคณิตศาสตร์สำหรับระดับคณิตศาสตร์ที่แตกต่างกัน

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

สัญกรณ์ "คณิตศาสตร์" ไม่ใช่คุณสมบัติทั่วไปของภาษาที่ใช้งานได้ Scala และภาษาที่ใช้เสียงกระเพื่อมมีไวยากรณ์ที่แตกต่างกันมากเมื่อเทียบกับ Haskell

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