คำถามพื้นฐาน:
อะไรแคลคูลัสแลมบ์ดาทำเพื่อเราว่าเราไม่สามารถทำอะไรกับคุณสมบัติฟังก์ชั่นพื้นฐานและสัญกรณ์เรียนรู้โดยทั่วไปในพีชคณิตโรงเรียนมัธยม?
ก่อนอื่นสิ่งที่เป็นนามธรรมหมายถึงอะไรในบริบทของแคลคูลัสแลมบ์ดา? ความเข้าใจของฉันเกี่ยวกับคำว่า abstract เป็นสิ่งที่หย่าร้างจากเครื่องจักรซึ่งเป็นแนวคิดสรุปของแนวคิด
อย่างไรก็ตามแลมบ์ดาฟังก์ชั่นโดยทำไปกับชื่อฟังก์ชั่นป้องกันระดับที่เป็นนามธรรม ตัวอย่างเช่น:
f(x) = x + 2
h(x, y) = x + 5 y
แต่ถึงแม้จะไม่ได้กำหนดกลไกของฟังก์ชั่นเหล่านี้เราก็สามารถพูดคุยเกี่ยวกับองค์ประกอบของมันได้อย่างง่ายดาย ตัวอย่างเช่น:
1. h(x, y) . f(x) . f(x) . h(x, y) or
2. h . f . f . h
เราสามารถรวมข้อโต้แย้งหากเราต้องการหรือเราสามารถสรุปได้อย่างสมบูรณ์เพื่อให้ภาพรวมของสิ่งที่เกิดขึ้น และเราสามารถลดพวกมันอย่างรวดเร็วให้เป็นฟังก์ชันเดียว ลองดูองค์ประกอบที่ 2 ฉันสามารถมีรายละเอียดของชั้นนักเรียนที่ฉันสามารถเขียนได้โดยขึ้นอยู่กับความสำคัญของฉัน:
g = h . f . f . h
g(x, y) = h(x, y) . f(x) . f(x) . h(x, y)
g(x, y) = h . f . f . h = x + 10 y + 4
ลองทำข้างบนด้วยแคลคูลัสแลมบ์ดาหรืออย่างน้อยก็นิยามฟังก์ชั่น ฉันไม่แน่ใจว่าสิ่งนี้ถูกต้อง แต่ฉันเชื่อว่าการเพิ่มขึ้นครั้งแรกและครั้งที่สองจะเพิ่มขึ้น 2
(λuv.u(u(uv)))(λwyx.y(wyx))x
และคูณด้วย 5y
(λz.y(5z))
แทนที่จะเป็นนามธรรมสิ่งนี้ดูเหมือนจะเข้าไปในสิ่งที่มันหมายถึงการเพิ่มทวีคูณเป็นต้นสิ่งที่เป็นนามธรรมในใจของฉันหมายถึงระดับที่สูงกว่าระดับที่ต่ำกว่า
นอกจากนี้ฉันกำลังดิ้นรนเพื่อดูว่าทำไมแคลคูลัสแลมบ์ดาถึงเป็นเช่นนั้น ข้อดีของ
(λuv.u(u(uv)))(λwyx.y(wyx))x
เกิน
h(x) = x + 5 y
หรือสัญลักษณ์รวมกัน
Hxy.x+5y
หรือแม้แต่สัญกรณ์ของ Haskell
h x y = x + 5 * y
อีกครั้งสิ่งที่แคลคูลัสแลมบ์ดาทำเพื่อเราที่เราไม่สามารถทำได้กับคุณสมบัติฟังก์ชั่นสไตล์ f (x) และสัญกรณ์ที่หลายคนคุ้นเคย