View
51
Download
0
Category
Preview:
DESCRIPTION
Functional Programming. Tasanawan Soonklang. Programming paradigms. Imperative Object-oriented Functional Logic. Procedural programming. Non-procedural programming or Declarative programming. Procedural programming. วิธีการสั่งงานได้รับอิทธิพลโดยตรงจากสถาปัตยกรรมของคอมพิวเตอร์ - PowerPoint PPT Presentation
Citation preview
Functional ProgrammingTasanawan Soonklang
Programming paradigms
• Imperative• Object-oriented• Functional• Logic
Procedural programming
Non-procedural programmingor Declarative programming
Procedural programming• วิ�ธี�การสั่งงานได้�รบอิ�ทธี�พลโด้ยตรงจาก
สั่ถาปั�ตยกรรมขอิงคอิมพ�วิเตอิร • Von Neumann machine ปัระกอิบด้วิ�ย
– หน#วิยปัระมวิลผลกลาง ควิบค&มและปัระมวิลผลค(าสั่ง– หน#วิยควิามจ(า เก)บชุ&ด้ค(าสั่งขอิงโปัรแกรมและข�อิม+ลท�จะใชุ�
• ใชุ�แนวิค�ด้ในการเปัล�ยนสั่ถานะ (ค#าในหน#วิยควิามจ(า) ขอิงเคร-อิงไปัตามล(าด้บ จนได้�ผลลพธี ท�ต�อิงการ
• มกใชุ�ค(าสั่งก(าหนด้ค#า (assignment statement) เปั.นหลก ในการควิบค&มการท(างาน
• ม�ค(าสั่งปัระเภทอิ-นๆ ปัระกอิบในการก(าหนด้ล(าด้บการท(างาน เชุ#น ค(าสั่งวินซ้ำ(2า ค(าสั่งแบบม�เง-อินไข
Program Modulo
1) Read M12) Read M23) M1 = M1 - M24) If M1 >= 0 then goto (3)5) M1 = M1 + M26) Write M17) halt
Non-procedural programming
• อิอิกแบบเพ-อิลด้อิ�ทธี�พลขอิงลกษณะการท(างานขอิงเคร-อิง
• การเข�ยนโปัรแกรมเปั.นอิ�สั่ระจากฮาร ด้แวิร • ภาษาเชุ�งหน�าท�
– ใชุ�ฟั�งก ชุ นท�คล�ายกบฟั�งก ชุ นทางคณ�ตศาสั่ตร – ระบ&การเชุ-อิมโยงค#าจากข�อิม+ลเข�าไปัยงผลลพท – ไม#ต�อิงระบ&ข 2นตอินการเปัล�ยนแปัลงสั่ถานะภายในเคร-อิง
• ภาษาเชุ�งตรรกะ – ใชุ�ควิามสั่มพนธี เปั.นสั่#วินปัระกอิบหลกในการเข�ยน
โปัรแกรม– เปั.นการพ�สั่+จน ควิามจร�งขอิงควิามสั่มพนธี ท 2งหลายท�
ระบ&ไวิ�– ไม#ต�อิงระบ&ล(าด้บการท(างานให�กบโปัรแกรม
Title
• Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus et magna. Fusce sed sem sed magna suscipit egestas.
• Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus et magna. Fusce sed sem sed magna suscipit egestas.
• Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus et magna. Fusce sed sem sed magna suscipit egestas.
Functional Programming
สั่#วินปัระกอิบท�สั่(าคญ• โครงสั่ร�างข�อิม+ลพ-2นฐาน ค-อิ ล�สั่ต (list)• ฟั�งก ชุนพ-2นฐาน • โครงสั่ร�างท�ใชุ�สั่ร�างฟั�งก ชุนจากฟั�งก ชุนท�ม�อิย+#
โปัรแกรมปัระกอิบด้�วิยฟั�งก ชุน น�ยามจากน�พจน (expression)
• ค#าเด้�ยวิ• น�พจน ย#อิย• น�พจน แบบม�เง-อินไข
Imperative vs. Functional
int fact(int n){
int i = 1;for (int j = n; j>1; --j)
i = i * j;return I;
}
fun fact(0) = 1| fact (n) = n * fact(n-1);
• ไม#ม�ค(าสั่ง (statement)• ปัระกอิบด้�วิยน�พจน • สั่งให�ท(าซ้ำ(2าโด้ยใชุ�
recursive function• เร�ยกใชุ�ฟั�งก ชุนให�
ท(างาน แทนการระบ&ในร+ปัค(าสั่ง เชุ#น fact(3)
การปัระมวิลผลกลไกพ-2นฐาน 2 ปัระการ• การเชุ-อิมโยงระหวิ#างชุ-อิกบค#า
(binding)• การเร�ยกใชุ�ฟั�งก ชุ น (application)
fact(3)• เชุ-อิมโยง 3 กบชุ-อิ n ในโปัรแกรม• เร�ยกใชุ�ฟั�งก ชุ นท� n ม�ค#าเปั.น 3
ฟั�งก ชุน (function)
• การเชุ-อิมโยงข�อิม+ลจากเซ้ำตขอิงโด้เมน ไปัยง ข�อิม+ลในเซ้ำตขอิงเรนจ (โคโด้เมน)
X1 X2
X3X4
f(X1)
f(X2) = f(X3)
f(X4)
การเชุ-อิมโยงข�อิม+ล (mapping)
• Total function การเชุ-อิมโยงข�อิม+ลท&กตวิในเซ้ำตขอิงโด้เมน
• Partial function การเชุ-อิมโยงข�อิม+ลบางตวิในเซ้ำตขอิงโด้เมน
• ข�อิม+ลหน:งตวิจากเซ้ำตขอิงโด้เมนจะเชุ-อิมโยงไปัยงข�อิม+ลเพ�ยงตวิเด้�ยวิในเซ้ำตขอิงเรนจ
• การน�ยามฟั�งก ชุ นไม#ก(ากวิม
การอิธี�บายการเชุ-อิมโยงร+ปัแบบการอิธี�บายการเชุ-อิมโยง• การแจกแจงท&กการเชุ-อิมโยง• แผนภาพ• กฎหร-อิสั่มการ
. .
-2-1 0 1 2 . .
minuszeroplus
...
...sign(-2) = minussign(-1) = minussign(0) = zerosign(1) = plussign(1) = plus……
minus if x <0sign(x) = zero if x = 0
plus if x > 0
การเชุ-อิมโยงข�อิม+ล (mapping)
• Total function การเชุ-อิมโยงข�อิม+ลท&กตวิในเซ้ำตขอิงโด้เมน
• Partial function การเชุ-อิมโยงข�อิม+ลบางตวิในเซ้ำตขอิงโด้เมน
• ข�อิม+ลหน:งตวิจากเซ้ำตขอิงโด้เมนจะเชุ-อิมโยงไปัยงข�อิม+ลเพ�ยงตวิเด้�ยวิในเซ้ำตขอิงเรนจ
• การน�ยามฟั�งก ชุ นไม#ก(ากวิม
แคลค+ลสั่แลมปั<ด้า• แคลค+ลสั่อิย#างง#าย• ใชุ�เปั.นโมเด้ลอิธี�บายการท(างานขอิงฟั�ง
ก ชุน• เปั.นพ-2นฐานในการอิอิกแบบภาษาเชุ�งหน�าท�• ใใใใใใใใใใใใใใ(lambda) แทนฟั�งก ชุน• ใใใใใใใใใใใใใใใใใใใใใใใใใ
x.x*x การเร�ยกใชุ�
((x.x*x )2)
ตวิอิย#าง• ก(าหนด้ square x.x*x • จงหา to-the-fourth square o square
(square,square).x.square(square(x)) x.(x.x*x(x.x*x(x)))x.(x.x*x(.x*x))x.((.x*x)(x*x))(2*2) * (2*2)4*4
อิงค ปัระกอิบขอิงภาษา (Components)
• ใชุ�การเร�ยกฟั�งก ชุนมาท(างาน แทนการระบ&ในร+ปัค(าสั่ง
• น�ยามข:2นจากน�พจน ต#างๆ • เปั.นลกษณะการท(างานตามหน�าท� (Functional) • ม�สั่#วินปัระกอิบด้งน�2
โครงสั่ร�างข�อิม+ลพ-2นฐาน ค-อิ list ใชุ�เก)บข�อิม+ล ฟั�งก ชุนพ-2นฐาน เพ-อิท(างานกบ list
โครงสั่ร�างท�ชุ#วิยสั่ร�างฟั�งก ชุนใหม#จากฟั�งก ชุนท�ม�อิย+#
Title
• Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus et magna. Fusce sed sem sed magna suscipit egestas.
• Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus et magna. Fusce sed sem sed magna suscipit egestas.
• Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus et magna. Fusce sed sem sed magna suscipit egestas.
ภาษา LISP
LISP - List and Symbol Processing Language• ภาษาระด้บสั่+งเก#าแก#อินด้บสั่อิงรอิงจากภาษาฟั
อิร แทรน• สั่ร�างข:2นเพ-อินปัระมวิลผลกบข�อิควิามสั่ญลกษณ
ต#างๆ • เหมาะกบงานด้�านปั�ญญาปัระด้�ษฐ • เปั.นภาษาเชุ�งหน�าท�อิย#างแท�จร�ง • การท(างานผ#านฟั�งก ชุ น • ไม#ม�การใชุ�ตวิแปัร global หร-อิค(าสั่งก(าหนด้ค#าให�
ตวิแปัร• ค#าขอิงตวิแปัรเก�ด้จากการสั่#งผ#านค#าระหวิ#างฟั�ง
ก ชุ น
LISP (List Processor)
• น�พจน Lambda– x.y. x+y)
• โปัรแกรมในภาษา LISP (LAMBDA(X Y) (PLUS X Y))
• การเร�ยกใชุ�ฟั�งก ชุ น( (LAMBDA(X Y) (PLUS X Y)) 2 3)
• การต2งชุ-อิฟั�งก ชุ น– DEFINE(ADD(LAMBDA(X Y) (PLUS X Y)))– (ADD 2 3)
LISP (List Processor)
• Primitive function– Identity function QUOTE– Selection Operations CAR, CDR– Structuring Operations CONS– Predicate Functions ATOM, NULL, EQ, COND
• DEFINE(ADD(LAMBDA(X Y) (PLUS X Y)))• Functional forms
(LAMBDA(x) (SQUARE(SQUARE x))5)• Objects
ATOM, LIST
Title
• Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus et magna. Fusce sed sem sed magna suscipit egestas.
• Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus et magna. Fusce sed sem sed magna suscipit egestas.
• Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus et magna. Fusce sed sem sed magna suscipit egestas.
ภาษา Scheme
• ม�รากฐานจากภาษา LISP• โครงสั่ร�างภาษาขนาด้เล)ก • syntax และ semantic ง#ายไม#ซ้ำบซ้ำ�อิน• เข�ยนอิย+#ในร+ปัแบบโครงสั่ร�างขอิง list หร-อิน�พจน
ต#างๆ• การท(างานซ้ำ(2าใชุ�วิ�ธี�การขอิง recursive function• ตวิแปัรภาษาเปั.นลกษณะขอิง interpreter• เปั.นภาษาท�น�ยมใชุ�ในการเร�ยนการสั่อิน
Scheme
• Syntax : โปัรแกรมปัระกอิบด้�วิยน�พจน เข�ยนอิย+#ในวิงเล)บในร+ปั prefix (ในร+ปัโครงสั่ร�างขอิง list)˃ (+ 2 3) ; evaluates to 5˃ (- 4 2 1) ; evaluates to 1˃ (* 5 (+ 4 3))˃ (max 2 3 17)
• Semantic : สั่ญลกษณ ตวิแรกในน�พจน ค-อิ operator/function ตวิท�ตามมาเปั.น operand/argument
Scheme
• ก(าหนด้ค#าหร-อิตวิแปัร˃ (define f 120)˃ f ; evaluates to 120˃ (+ f 5)
• ก(าหนด้เปั.นร+ปัแบบขอิงข�อิม+ล˃ (2 3 4) ; error: 2 is not a
function˃ (quote (2 3 4))˃ ‘(2 3 4)
ปัระเภทขอิงน�พจน • น�พจน คณ�ตศาสั่ตร ให�ค#าเปั.นตวิเลข
> (+ f 5)• น�พจน ตรรกะ ให�ค#าเปั.นจร�งและเท)จ
> (< 1 5)> (not (> 5 10)
• น�พจน แบบม�เง-อินไข ให�เล-อิกท(างานตามเง-อินไขท�ระบ&> (if (> 5 4) 40 50)> (cond ((> 3 2) “greater”) ((<3 2) “less”)))
• น�พจน แลมปั<ด้า ใชุ�น�ยามฟั�งก ชุน> (lambda (x) (+ x 1))> ((lambda (x) (+ x 1)) 3)
ฟั�งก ชุนปัระมวิลผลข�อิม+ล• (null? x) ตรวิจสั่อิบวิ#า x เปั.น list วิ#างหร-อิไม#• (cons a x) เพ�ม a เข�าไปัท�ต�น list
• (append x y) น(า list y ไปัต#อิท�าย list x
• (car x) สั่#งค#าสั่มาชุ�กต(าแหน#งแรกใน list x
• (cdr x) สั่#งค#าสั่มาชุ�กใน list x ท&กตวิ ยกเวิ�นตวิแรก• (length x) สั่#งค#าจ(านวินสั่มาชุ�กใน list x
• (reverse x) สั่#งค#าเปั.นสั่มาชุ�กใน list x ในล(าด้บย�อินกลบ
• (equal? x y) ตรวิจสั่อิบวิ#า list x เหม-อินกบ list y หร-อิไม#
ฟั�งก ชุนปัระมวิลผลข�อิม+ล> (define mylist (list 1 2 3 4)) ; mylist> mylist ; (1 2 3 4)> (length mylist) ; 4> (reverse mylist) ; (4 3 2 1)> (cons a mylist) ; (a 1 2 3 4)> (append ‘(a b) mylist) ; (a b 1 2 3 4)> (null? mylist) ; #f> (car mylist) ; 1> (cdr mylist) ; (2 3 4)> (car (cdr mylist))> (cdr (cdr mylist))> (car (cdr (cdr mylist)))
ฟั�งก ชุนเวิ�ยนบงเก�ด้(define (factorial n) (if (< n 1) 1
(* n (factorial (- n 1) ) ) ) )
(factorial 3) = (* 3 (factorial 2))= (* 3 (* 2 (factorial 1)))= (* 3 (* 2 (* 1 (factorial 0))))= (* 3 (* 2 (* 1 1)))= (* 3 (* 2 1))= (* 3 2)= 6
1 if n=0f(n)
n*f(n-1) if n>0
Imperative VS Functional
• แนวิค�ด้พ-2นฐานขอิงการสั่ร�างโปัรแกรม– ฟั�งก ชุนทางคณ�ตศาสั่ตร เชุ-อิมโยงค#าจากข�อิม+ลไปัยง
ผลลพธี – ก(าหนด้ค#าข�อิม+ลในร+ปัตวิแปัร ท(าการเปัล�ยนแปัลงค#า
โด้ยค(าสั่งต#างๆ ไปัสั่+#ผลลพธี • ควิามเปั.นอิ�สั่ระจากฮาร ด้แวิร
– ไม#เก�ยวิข�อิงกบโครงสั่ร�างภายในหน#วิยควิามจ(าหร-อิการเปัล�ยนสั่ถานะขอิงหน#วิยควิามจ(า
• การเข�ยนโปัรแกรม – syntax และ semantic ท�เร�ยบง#ายปัระกอิบด้�วิยน�พจน
ต#างๆ
Recommended