***ทั้ง3หัวข้อด้านล่างนี้อ่ะค่ะ หาข้อมูลมานานมากแต่ยังไม่แคบพอจะเข้าใจในแต่ละหัวข้อเลยค่ะ 1.) Higher-order functions 2.) Lambda expressions/functions 3.) ตัวอย่างการใช้งาน
ลองดูบทที่ 1 sake Wed, 29/02/2012 - 06:35 ลองดูบทที่ 1 ดูครับ http://gnosis.cx/TPiP/ Log in or register to post comments พวกนี้มันเป็น functional neizod Wed, 29/02/2012 - 22:09 พวกนี้มันเป็น 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 Log in or register to post comments อธิบายเรื่อง Higher-order m3rlinez Thu, 01/03/2012 - 02:22 อธิบายเรื่อง 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 <function add at 0x0218A9F0> op2 <function multiply at 0x0236BD70> {/syntaxhighlighter} Log in or register to post comments มันเป็น Math functional Invisible Force Thu, 01/03/2012 - 12:33 มันเป็น Math functional programming ดีๆ นี่เอง Log in or register to post comments เมพจิงๆ umtapao Mon, 05/03/2012 - 13:23 เมพจิงๆ Log in or register to post comments
ลองดูบทที่ 1 sake Wed, 29/02/2012 - 06:35 ลองดูบทที่ 1 ดูครับ http://gnosis.cx/TPiP/ Log in or register to post comments
พวกนี้มันเป็น functional neizod Wed, 29/02/2012 - 22:09 พวกนี้มันเป็น 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 Log in or register to post comments
อธิบายเรื่อง Higher-order m3rlinez Thu, 01/03/2012 - 02:22 อธิบายเรื่อง 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 <function add at 0x0218A9F0> op2 <function multiply at 0x0236BD70> {/syntaxhighlighter} Log in or register to post comments
มันเป็น Math functional Invisible Force Thu, 01/03/2012 - 12:33 มันเป็น Math functional programming ดีๆ นี่เอง Log in or register to post comments
ลองดูบทที่ 1
sake Wed, 29/02/2012 - 06:35
ลองดูบทที่ 1 ดูครับ
http://gnosis.cx/TPiP/
พวกนี้มันเป็น functional
neizod Wed, 29/02/2012 - 22:09
พวกนี้มันเป็น functional programming ครับ
{syntaxhighlighter class="brush: python"}
f = lambda x: x+1
f(5) # return 6
(lambda x: x*2)(21) # return 42
{/syntaxhighlighter}
{syntaxhighlighter class="brush: python"}
h = lambda f, x: f(x+1)
h(lambda x: x*2, 5) # return 12
{/syntaxhighlighter}
อธิบายเรื่อง Higher-order
m3rlinez Thu, 01/03/2012 - 02:22
อธิบายเรื่อง Higher-order function เพิ่มให้ละกัน
อ้างจาก Wikipedia, function ที่เป็น higher-order function ต้องมีคุณบัติอย่างน้อยหนึ่งข้อจากสองข้อนี้
1. รับ parameter อย่างน้อยตัวหนึ่งที่เป็น function
2. return ผลลัพธ์ของมาเป็น function
ยึดตามนิยามนี้ ดูตัวอย่างเคสแรกลอง นึกถึง function บางอันใน python ที่รับ parameter เข้าไปเป็น function เช่น list.sort()
{syntaxhighlighter python}
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}
{/syntaxhighlighter}
มันเป็น Math functional
Invisible Force Thu, 01/03/2012 - 12:33
มันเป็น Math functional programming ดีๆ นี่เอง
เมพจิงๆ
umtapao Mon, 05/03/2012 - 13:23
เมพจิงๆ