Tags:
Forums: 

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

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

Get latest news from Blognone
By: sake on 29 February 2012 - 06:35 #389195

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

http://gnosis.cx/TPiP/

By: neizod
ContributorTraineeIn Love
on 29 February 2012 - 22:09 #389544
neizod's picture

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

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

{syntaxhighlighter class="brush: python"}
f = lambda x: x+1
f(5) # return 6
(lambda x: x*2)(21) # return 42
{/syntaxhighlighter}

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

{syntaxhighlighter class="brush: python"}
h = lambda f, x: f(x+1)
h(lambda x: x*2, 5) # return 12
{/syntaxhighlighter}

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

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

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

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

    ยึดตามนิยามนี้ ดูตัวอย่างเคสแรกลอง นึกถึง function บางอันใน python ที่รับ parameter เข้าไปเป็น function เช่น list.sort()

    {syntaxhighlighter python}

    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
    {/syntaxhighlighter}

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

    {syntaxhighlighter python}

    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

    op2

    {/syntaxhighlighter}

    By: Invisible Force
    ContributoriPhoneAndroidUbuntu
    on 1 March 2012 - 12:33 #389796
    Invisible Force's picture

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

    By: umtapao
    Android
    on 5 March 2012 - 13:23 #390978

    เมพจิงๆ