***ทั้ง3หัวข้อด้านล่างนี้อ่ะค่ะ หาข้อมูลมานานมากแต่ยังไม่แคบพอจะเข้าใจในแต่ละหัวข้อเลยค่ะ
1.) Higher-order functions 2.) Lambda expressions/functions 3.) ตัวอย่างการใช้งาน
ลองดูบทที่ 1 ดูครับ
http://gnosis.cx/TPiP/
พวกนี้มันเป็น functional programming ครับ
f = lambda x: x+1 f(5) # return 6 (lambda x: x*2)(21) # return 42
h = lambda f, x: f(x+1) h(lambda x: x*2, 5) # return 12
อธิบายเรื่อง Higher-order function เพิ่มให้ละกัน
อ้างจาก Wikipedia, function ที่เป็น higher-order function ต้องมีคุณบัติอย่างน้อยหนึ่งข้อจากสองข้อนี้
ยึดตามนิยามนี้ ดูตัวอย่างเคสแรกลอง นึกถึง function บางอันใน python ที่รับ parameter เข้าไปเป็น function เช่น list.sort()
>>> a = [-100,2,-3,4] >>> a.sort(key=abs) >>> a [2, -3, 4, -100] >>> help(a.sort) Help on built-in function sort: sort(...) L.sort(cmp=None, key=None, reverse=False) -- stable sort IN PLACE; cmp(x, y) -> -1, 0, 1
sort(...) L.sort(cmp=None, key=None, reverse=False) -- stable sort IN PLACE; cmp(x, y) -> -1, 0, 1
ในตัวอย่างเราส่ง function abs (absolute) เข้าไปเป็น parameter ที่ชื่อ key ของ sort เพื่อให้เรียงลำดับค่าตามค่าสัมบูรณ์ ดังนั้น list.sort จัดว่าเป็น higher-order function
อีกตัวอย่างที่ return ค่าเป็น function บ้าง เช่น เราอาจจะอยากได้ fn ที่ return fn คำนวณออกมาตาม string ที่ใส่เข้าไป
ในตัวอย่างด้านล่าง getoperator เป็น higher-order fn เพราะมัน return ผลลัพธ์ออกมาเป็น fn (เช่นใน op1 และ op2)
>>> def add(x,y): ... return x + y ... >>> def subtract(x,y): ... return x - y ... >>> def multiply(x,y): ... return x * y ... >>> def getoperator(symbol): ... if symbol == '+': ... return add ... elif symbol == '-': ... return subtract ... else: ... return multiply ... >>> op1 = getoperator('+') >>> op2 = getoperator('*') >>> op2(op1(21,19), 10) 400 >>> op1 <function add at 0x0218A9F0> >>> op2 <function multiply at 0x0236BD70> >>>
มันเป็น Math functional programming ดีๆ นี่เอง
เมพจิงๆ
Comments
ลองดูบทที่ 1 ดูครับ
http://gnosis.cx/TPiP/
พวกนี้มันเป็น functional programming ครับ
อธิบายเรื่อง Higher-order function เพิ่มให้ละกัน
อ้างจาก Wikipedia, function ที่เป็น higher-order function ต้องมีคุณบัติอย่างน้อยหนึ่งข้อจากสองข้อนี้
1. รับ parameter อย่างน้อยตัวหนึ่งที่เป็น function
2. return ผลลัพธ์ของมาเป็น function
ยึดตามนิยามนี้ ดูตัวอย่างเคสแรกลอง นึกถึง function บางอันใน python ที่รับ parameter เข้าไปเป็น function เช่น list.sort()
ในตัวอย่างเราส่ง function abs (absolute) เข้าไปเป็น parameter ที่ชื่อ key ของ sort เพื่อให้เรียงลำดับค่าตามค่าสัมบูรณ์ ดังนั้น list.sort จัดว่าเป็น higher-order function
อีกตัวอย่างที่ return ค่าเป็น function บ้าง เช่น เราอาจจะอยากได้ fn ที่ return fn คำนวณออกมาตาม string ที่ใส่เข้าไป
ในตัวอย่างด้านล่าง getoperator เป็น higher-order fn เพราะมัน return ผลลัพธ์ออกมาเป็น fn (เช่นใน op1 และ op2)
>>> def add(x,y): ... return x + y ... >>> def subtract(x,y): ... return x - y ... >>> def multiply(x,y): ... return x * y ... >>> def getoperator(symbol): ... if symbol == '+': ... return add ... elif symbol == '-': ... return subtract ... else: ... return multiply ... >>> op1 = getoperator('+') >>> op2 = getoperator('*') >>> op2(op1(21,19), 10) 400 >>> op1 <function add at 0x0218A9F0> >>> op2 <function multiply at 0x0236BD70> >>>มันเป็น Math functional programming ดีๆ นี่เอง
เมพจิงๆ