Tags:

***ทั้ง3หัวข้อด้านล่างนี้อ่ะค่ะ หาข้อมูลมานานมากแต่ยังไม่แคบพอจะเข้าใจในแต่ละหัวข้อเลยค่ะ

1.) Higher-order functions
2.) Lambda expressions/functions
3.) ตัวอย่างการใช้งาน

Comments

By: sake
sake's blog
on 29/02/12 5:35 #389195 toggle
sake's picture

ลองดูบทที่ 1 ดูครับ

http://gnosis.cx/TPiP/

By: neizod
ContributorTraineeIn Love
neizod's blog
on 29/02/12 21:09 #389544 toggle
neizod's picture

พวกนี้มันเป็น functional programming ครับ

  • lambda fn: ทางทฤษฏีแล้ว คือการเขียนประกาศฟังก์ชันโดยบอกขั้นตอนการทำงานเป็นภาษาคณิตศาสตร์ เช่น λx.x+1 หมายถึงรับค่าตัวแปร x เข้ามา แล้วส่งคืน x+1 นั่นเอง
  • ใน python เราเขียน

f = lambda x: x+1
f(5)                   # return 6
(lambda x: x*2)(21)    # return 42

  • ข้อดีเช่น มันทำให้สามารถ define fn เพื่อใช้งานเฉพาะได้โดยไม่ต้องกังวลเรื่อง namespace
  • ส่วน higher-order fn: คือการรับตัวแปรที่เป็นฟังก์ชันและค่าอื่นๆ เข้าไป แล้วส่งคืนค่าออกมาเป็นการคำนวณในรูปของฟังก์ชันและค่าที่ส่งเข้าไป
  • ใน python มันทำได้หลายวิธี แต่ผมยกตัวอย่างที่ใช้ lambda ละกัน

h = lambda f, x: f(x+1)
h(lambda x: x*2, 5)    # return 12

  • จากตัวอย่าง บรรทัดแรก h คือ higher-order fn ที่รับตัวแปรเป็นฟังก์ชัน และเลขตัวหนึ่งเข้าไป
  • บรรทัดที่สอง ส่งฟังก์ชันที่บอกว่า ให้นำค่าที่ได้ไปคูณ 2 เข้าไปใน h และส่งค่า 5 เข้าไปทำใน h
By: m3rlinez
m3rlinez's blog
on 01/03/12 1:22 #389654 toggle
m3rlinez's picture

อธิบายเรื่อง Higher-order function เพิ่มให้ละกัน

อ้างจาก Wikipedia, function ที่เป็น higher-order function ต้องมีคุณบัติอย่างน้อยหนึ่งข้อจากสองข้อนี้

      1. รับ parameter อย่างน้อยตัวหนึ่งที่เป็น function
      2. return ผลลัพธ์ของมาเป็น 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

ในตัวอย่างเราส่ง 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>
>>>

By: Invisible Force
ContributoriPhoneAndroidUbuntu
Invisible Force's blog
on 01/03/12 11:33 #389796 toggle
Invisible Force's picture

มันเป็น Math functional programming ดีๆ นี่เอง

By: umtapao
Android
umtapao's blog
on 05/03/12 12:23 #390978 toggle
umtapao's picture

เมพจิงๆ