ความเข้าใจที่ จำกัด ของฉันคือ:
1) แอปพลิเคชันฟังก์ชันบางส่วน
แอปพลิเคชันฟังก์ชันบางส่วนเป็นกระบวนการส่งคืนฟังก์ชันที่ใช้จำนวนอาร์กิวเมนต์น้อยลง หากคุณให้ 2 จาก 3 ข้อโต้แย้งมันจะส่งคืนฟังก์ชันที่ใช้อาร์กิวเมนต์ 3-2 = 1 หากคุณระบุ 1 ใน 3 ข้อโต้แย้งมันจะส่งคืนฟังก์ชันที่ใช้อาร์กิวเมนต์ 3-1 = 2 หากคุณต้องการคุณสามารถใช้บางส่วนของอาร์กิวเมนต์ 3 จาก 3 และบางส่วนจะส่งคืนฟังก์ชันที่ไม่มีการโต้แย้ง
รับฟังก์ชั่นดังต่อไปนี้:
f(x,y,z) = x + y + z;
เมื่อผูก 1 ถึง x และนำบางส่วนไปใช้กับฟังก์ชั่นด้านบนf(x,y,z)
คุณจะได้รับ:
f(1,y,z) = f'(y,z);
ที่ไหน: f'(y,z) = 1 + y + z;
ตอนนี้ถ้าคุณผูก y กับ 2 และ z ถึง 3 และนำไปใช้บางส่วนf'(y,z)
คุณจะได้รับ:
f'(2,3) = f''();
ที่ไหน: f''() = 1 + 2 + 3
;
ตอนนี้ที่จุดใด ๆ ที่คุณสามารถเลือกที่จะประเมินผลการศึกษาf
, หรือf'
f''
ดังนั้นฉันสามารถทำ:
print(f''()) // and it would return 6;
หรือ
print(f'(1,1)) // and it would return 3;
2) แกงกะหรี่
ความดีความชอบในมืออื่น ๆ เป็นกระบวนการของการแยกการทำงานเป็นห่วงโซ่ที่ซ้อนกันของฟังก์ชั่นการโต้แย้งอย่างใดอย่างหนึ่ง คุณไม่สามารถให้อาร์กิวเมนต์มากกว่า 1 รายการซึ่งเป็นหนึ่งหรือศูนย์
รับฟังก์ชั่นเดียวกันดังนั้น:
f(x,y,z) = x + y + z;
หากคุณแก้ปัญหาคุณจะได้ 3 ฟังก์ชัน:
f'(x) -> f''(y) -> f'''(z)
ที่ไหน:
f'(x) = x + f''(y);
f''(y) = y + f'''(z);
f'''(z) = z;
ตอนนี้ถ้าคุณโทรf'(x)
ด้วยx = 1
:
f'(1) = 1 + f''(y);
คุณถูกส่งคืนฟังก์ชันใหม่:
g(y) = 1 + f''(y);
หากคุณโทรg(y)
ด้วยy = 2
:
g(2) = 1 + 2 + f'''(z);
คุณถูกส่งคืนฟังก์ชันใหม่:
h(z) = 1 + 2 + f'''(z);
ในที่สุดถ้าคุณโทรh(z)
ด้วยz = 3
:
h(3) = 1 + 2 + 3;
คุณกลับมา6
แล้ว
3) การปิด
ในที่สุดการปิดคือกระบวนการของการจับฟังก์ชั่นและข้อมูลร่วมกันเป็นหน่วยเดียว ฟังก์ชั่นการปิดสามารถใช้ 0 เป็นจำนวนอาร์กิวเมนต์ไม่สิ้นสุด แต่ก็ยังรับรู้ถึงข้อมูลที่ไม่ได้ผ่านไป
อีกครั้งรับฟังก์ชั่นเดียวกัน:
f(x,y,z) = x + y + z;
คุณสามารถเขียนปิด:
f(x) = x + f'(y, z);
ที่ไหน:
f'(y,z) = x + y + z;
f'
x
ปิดให้บริการใน หมายความว่าf'
สามารถอ่านค่าของ x f
ที่อยู่ภายใน
ดังนั้นถ้าคุณจะโทรf
ด้วยx = 1
:
f(1) = 1 + f'(y, z);
คุณจะได้รับการปิด:
closureOfF(y, z) =
var x = 1;
f'(y, z);
ตอนนี้ถ้าคุณโทรหาclosureOfF
ด้วยy = 2
และz = 3
:
closureOfF(2, 3) =
var x = 1;
x + 2 + 3;
ซึ่งจะกลับมา 6
ข้อสรุป
แอพพลิเคชั่นและการปิดบางส่วนมีลักษณะค่อนข้างคล้ายกันเมื่อพวกมันย่อยสลายฟังก์ชั่นออกเป็นส่วน ๆ มากขึ้น
การแยกย่อยสลายฟังก์ชันของอาร์กิวเมนต์หลายตัวเป็นฟังก์ชันซ้อนกันของอาร์กิวเมนต์เดี่ยวที่ส่งคืนฟังก์ชันของอาร์กิวเมนต์เดี่ยว ไม่มีประเด็นใดที่จะปิดกั้นฟังก์ชั่นการโต้แย้งอย่างน้อยหนึ่งข้อเนื่องจากมันไม่สมเหตุสมผล
แอปพลิเคชั่นบางส่วนจะสลายฟังก์ชันของอาร์กิวเมนต์หลายตัวเป็นฟังก์ชันของอาร์กิวเมนต์ที่น้อยกว่าซึ่งตอนนี้อาร์กิวเมนต์ที่ขาดหายไปจะถูกแทนที่ด้วยค่าที่ให้มา
การปิดการสลายตัวของฟังก์ชั่นเป็นฟังก์ชั่นและชุดข้อมูลที่ตัวแปรภายในฟังก์ชั่นที่ไม่ได้ผ่านสามารถดูภายในชุดข้อมูลเพื่อหาค่าที่จะผูกกับเมื่อถามเพื่อประเมิน
สิ่งที่ทำให้เกิดความสับสนเกี่ยวกับสิ่งเหล่านี้คือพวกเขาสามารถนำมาใช้เพื่อนำส่วนย่อยของคนอื่นมาใช้ ดังนั้นโดยสรุปแล้วพวกเขาทั้งหมดมีรายละเอียดเล็กน้อยเกี่ยวกับการใช้งาน พวกเขาทั้งหมดให้ค่าที่คล้ายกันในที่ที่คุณไม่จำเป็นต้องรวบรวมค่าทั้งหมดล่วงหน้าและในที่คุณสามารถนำมาใช้เป็นส่วนหนึ่งของฟังก์ชั่นเนื่องจากคุณได้สลายมันเป็นหน่วยที่สุขุม
การเปิดเผย
ฉันไม่ได้เป็นผู้เชี่ยวชาญในหัวข้อฉันเพิ่งเริ่มเรียนรู้เกี่ยวกับสิ่งเหล่านี้และดังนั้นฉันจึงให้ความเข้าใจในปัจจุบันของฉัน แต่อาจมีข้อผิดพลาดที่ฉันเชิญคุณให้ชี้ให้เห็นและจะแก้ไขตาม / ถ้า ฉันค้นพบใด ๆ