การเขียนโปรแกรมเชิงฟังก์ชั่นเกี่ยวข้องกับคณิตศาสตร์หรือไม่ มันต้องมีฐานที่แข็งแกร่งของคณิตศาสตร์เพื่อเรียนรู้และเข้าใจการเขียนโปรแกรมที่ใช้งานได้สำหรับโปรแกรมเมอร์ที่มีพื้นฐานที่จำเป็นหรือไม่?
การเขียนโปรแกรมเชิงฟังก์ชั่นเกี่ยวข้องกับคณิตศาสตร์หรือไม่ มันต้องมีฐานที่แข็งแกร่งของคณิตศาสตร์เพื่อเรียนรู้และเข้าใจการเขียนโปรแกรมที่ใช้งานได้สำหรับโปรแกรมเมอร์ที่มีพื้นฐานที่จำเป็นหรือไม่?
คำตอบ:
การเขียนโปรแกรมทั้งหมดที่เกี่ยวข้องกับคณิตศาสตร์ แน่นอนว่ามหาวิทยาลัยหลายแห่งยังคงวางหลักสูตรวิทยาการคอมพิวเตอร์ภายใต้ขอบเขตของภาควิชาคณิตศาสตร์
สำหรับการเรียนรู้การเขียนโปรแกรมฟังก์ชั่นคุณไม่จำเป็นต้องมีพื้นฐานที่แข็งแกร่งในวิชาคณิตศาสตร์เพื่อเรียนรู้ ตอนนี้ฉันได้เรียนรู้ภาษาที่ใช้งานได้แตกต่างกันสามอย่างแล้วถึงความสามารถที่สมเหตุสมผล (Haskell, Erlang, Clojure) และทักษะคณิตศาสตร์ของฉันนั้นอ่อนแอมาก ชุมชนของ Haskell สามารถทำให้เกิดความรำคาญเล็กน้อยในวิธีที่เน้นคณิตศาสตร์ในการพูดเกี่ยวกับสิ่งต่าง ๆ แต่ Erlang และ Clojure ทั้งคู่เป็นภาษาที่ใช้งานได้จริงในการเขียนโปรแกรมซึ่งไม่ยากที่จะเข้าใจเพราะข้อมูลการสอนถูกเขียนขึ้น สำหรับโปรแกรมเมอร์ไม่ใช่ฮาร์ดคอร์คณิตศาสตร์ แม้จะมีแต้มต่อของฉันในวิชาคณิตศาสตร์ฉันก็ไปรับ Haskell ดังนั้นมันจึงเป็นไปไม่ได้
ความยากลำบากที่แท้จริงที่ฉันพบในการเลือกภาษาการเขียนโปรแกรมที่ประกาศโดยทั่วไป (ซึ่งการทำงานเป็นส่วนย่อย) คือการยกเลิกการกระตุ้นที่จะควบคุม; เพื่อบอกคอมพิวเตอร์ว่าต้องทำอะไร มันต้องใช้ความคุ้นเคยบ้าง
ใช่. โดยพื้นฐานแล้วฟังก์ชั่นการใช้งานเป็นพวงของคำสั่งเช่นนั้น:
// 1_ และ 2_ คือ "อาร์กิวเมนต์ดัมมี่" f (1_): = sin (1_) g (1_, 2_): = 1_ + 2_ ฯลฯ ...
x = f ()
y = g (x)
z = h (x, h2 (y))
ฯลฯ ...
คุณกำลังเขียนสิ่งที่โปรแกรมควรทำในรูปแบบของสมการที่กำหนดค่าใหม่ (หมายเหตุ: ไม่ใช่ตัวแปร) เป็นฟังก์ชันของค่าที่กำหนดไว้ก่อนหน้านี้ คุณยังกำหนดหน้าที่ความสัมพันธ์ มันค่อนข้างคล้ายกับวิธีเขียนทฤษฎีบททางคณิตศาสตร์
IMO Mathematica เป็นตัวอย่างของภาษาที่คุณสามารถใช้การเขียนโปรแกรมเชิงฟังก์ชันได้โดยไม่จำเป็นต้องมีพื้นฐานด้านคณิตศาสตร์ที่แข็งแกร่ง ที่จริงแล้วฉันไม่คิดว่าฉันจะพบอะไรเช่นการเขียนโปรแกรมเพื่อใช้งานในระหว่างการศึกษาคณิตศาสตร์ขั้นพื้นฐานของฉัน ฉันเริ่มต้นการเขียนโปรแกรม Mathematica ที่ทำในรูปแบบ C และค้นพบการเขียนโปรแกรมเชิงหน้าที่เพียงไม่กี่ปีต่อมา ฉันไม่คิดว่าพื้นฐานการเขียนโปรแกรมโครงสร้างการทำงานชอบMap
, Apply
, NestList
ฯลฯ จำเป็นต้องมีพื้นหลังคณิตศาสตร์ใด ๆ เลย
ไม่ได้จริงๆ ฟังก์ชั่นการเขียนโปรแกรมเป็นเพียงวิธีการ แต่มันมีฐานในแคลคูลัสแลมบ์ดาและสิ่งเช่นนั้น
การปิดคือความพยายาม (ขนาดเล็ก) ในการแนะนำแนวคิดการเขียนโปรแกรมเชิงหน้าที่ในภาษาเชิงปฏิบัติ แทนที่จะเป็นfor(int i =0 ; i < num; i++) doStuff(arr[i]);
เช่นนั้นคุณสามารถสันนิษฐานได้ว่าองค์ประกอบของอาเรย์นั้นอาจมีarr.each do |el| doStuff(el) end
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.
คำตอบสั้น ๆ คือ: ใช่เพราะทุกอย่างที่มีระดับความเป็นทางการ (เช่นภาษาการเขียนโปรแกรม) มีความสัมพันธ์อย่างมากกับคณิตศาสตร์สำหรับระดับคณิตศาสตร์ที่แตกต่างกัน
แต่การใช้ภาษาการเขียนโปรแกรมไม่จำเป็นต้องมีความคุ้นเคยกับคณิตศาสตร์เป็นอย่างมากเช่นรากฐานภาษา คุณไม่จำเป็นต้องรู้ว่าภาษาฟรีบริบทคืออะไรและกฎหมายและทรัพย์สินเช่นภาษามีเพื่อที่จะใช้ ในทำนองเดียวกันคุณไม่จำเป็นต้องเป็นคนเยอรมันหรือโรมันพูดภาษาเยอรมันหรือฝรั่งเศส
สัญกรณ์ "คณิตศาสตร์" ไม่ใช่คุณสมบัติทั่วไปของภาษาที่ใช้งานได้ Scala และภาษาที่ใช้เสียงกระเพื่อมมีไวยากรณ์ที่แตกต่างกันมากเมื่อเทียบกับ Haskell