26
Functional Programming Tasanawan Soonklang

Functional Programming

Embed Size (px)

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

Page 1: Functional Programming

Functional ProgrammingTasanawan Soonklang

Page 2: Functional Programming

Programming paradigms

• Imperative• Object-oriented• Functional• Logic

Procedural programming

Non-procedural programmingor Declarative programming

Page 3: Functional Programming

Procedural programming• วิ�ธี�การสั่งงานได้�รบอิ�ทธี�พลโด้ยตรงจาก

สั่ถาปั�ตยกรรมขอิงคอิมพ�วิเตอิร • Von Neumann machine ปัระกอิบด้วิ�ย

– หน#วิยปัระมวิลผลกลาง ควิบค&มและปัระมวิลผลค(าสั่ง– หน#วิยควิามจ(า เก)บชุ&ด้ค(าสั่งขอิงโปัรแกรมและข�อิม+ลท�จะใชุ�

• ใชุ�แนวิค�ด้ในการเปัล�ยนสั่ถานะ (ค#าในหน#วิยควิามจ(า) ขอิงเคร-อิงไปัตามล(าด้บ จนได้�ผลลพธี ท�ต�อิงการ

• มกใชุ�ค(าสั่งก(าหนด้ค#า (assignment statement) เปั.นหลก ในการควิบค&มการท(างาน

• ม�ค(าสั่งปัระเภทอิ-นๆ ปัระกอิบในการก(าหนด้ล(าด้บการท(างาน เชุ#น ค(าสั่งวินซ้ำ(2า ค(าสั่งแบบม�เง-อินไข

Page 4: Functional Programming

Program Modulo

1) Read M12) Read M23) M1 = M1 - M24) If M1 >= 0 then goto (3)5) M1 = M1 + M26) Write M17) halt

Page 5: Functional Programming

Non-procedural programming

• อิอิกแบบเพ-อิลด้อิ�ทธี�พลขอิงลกษณะการท(างานขอิงเคร-อิง

• การเข�ยนโปัรแกรมเปั.นอิ�สั่ระจากฮาร ด้แวิร • ภาษาเชุ�งหน�าท�

– ใชุ�ฟั�งก ชุ นท�คล�ายกบฟั�งก ชุ นทางคณ�ตศาสั่ตร – ระบ&การเชุ-อิมโยงค#าจากข�อิม+ลเข�าไปัยงผลลพท – ไม#ต�อิงระบ&ข 2นตอินการเปัล�ยนแปัลงสั่ถานะภายในเคร-อิง

• ภาษาเชุ�งตรรกะ – ใชุ�ควิามสั่มพนธี เปั.นสั่#วินปัระกอิบหลกในการเข�ยน

โปัรแกรม– เปั.นการพ�สั่+จน ควิามจร�งขอิงควิามสั่มพนธี ท 2งหลายท�

ระบ&ไวิ�– ไม#ต�อิงระบ&ล(าด้บการท(างานให�กบโปัรแกรม

Page 6: Functional Programming

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)

• ค#าเด้�ยวิ• น�พจน ย#อิย• น�พจน แบบม�เง-อินไข

Page 7: Functional Programming

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)

Page 8: Functional Programming

การปัระมวิลผลกลไกพ-2นฐาน 2 ปัระการ• การเชุ-อิมโยงระหวิ#างชุ-อิกบค#า

(binding)• การเร�ยกใชุ�ฟั�งก ชุ น (application)

fact(3)• เชุ-อิมโยง 3 กบชุ-อิ n ในโปัรแกรม• เร�ยกใชุ�ฟั�งก ชุ นท� n ม�ค#าเปั.น 3

Page 9: Functional Programming

ฟั�งก ชุน (function)

• การเชุ-อิมโยงข�อิม+ลจากเซ้ำตขอิงโด้เมน ไปัยง ข�อิม+ลในเซ้ำตขอิงเรนจ (โคโด้เมน)

X1 X2

X3X4

f(X1)

f(X2) = f(X3)

f(X4)

Page 10: Functional Programming

การเชุ-อิมโยงข�อิม+ล (mapping)

• Total function การเชุ-อิมโยงข�อิม+ลท&กตวิในเซ้ำตขอิงโด้เมน

• Partial function การเชุ-อิมโยงข�อิม+ลบางตวิในเซ้ำตขอิงโด้เมน

• ข�อิม+ลหน:งตวิจากเซ้ำตขอิงโด้เมนจะเชุ-อิมโยงไปัยงข�อิม+ลเพ�ยงตวิเด้�ยวิในเซ้ำตขอิงเรนจ

• การน�ยามฟั�งก ชุ นไม#ก(ากวิม

Page 11: Functional Programming

การอิธี�บายการเชุ-อิมโยงร+ปัแบบการอิธี�บายการเชุ-อิมโยง• การแจกแจงท&กการเชุ-อิมโยง• แผนภาพ• กฎหร-อิสั่มการ

. .

-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

Page 12: Functional Programming

การเชุ-อิมโยงข�อิม+ล (mapping)

• Total function การเชุ-อิมโยงข�อิม+ลท&กตวิในเซ้ำตขอิงโด้เมน

• Partial function การเชุ-อิมโยงข�อิม+ลบางตวิในเซ้ำตขอิงโด้เมน

• ข�อิม+ลหน:งตวิจากเซ้ำตขอิงโด้เมนจะเชุ-อิมโยงไปัยงข�อิม+ลเพ�ยงตวิเด้�ยวิในเซ้ำตขอิงเรนจ

• การน�ยามฟั�งก ชุ นไม#ก(ากวิม

Page 13: Functional Programming

แคลค+ลสั่แลมปั<ด้า• แคลค+ลสั่อิย#างง#าย• ใชุ�เปั.นโมเด้ลอิธี�บายการท(างานขอิงฟั�ง

ก ชุน• เปั.นพ-2นฐานในการอิอิกแบบภาษาเชุ�งหน�าท�• ใใใใใใใใใใใใใใ(lambda) แทนฟั�งก ชุน• ใใใใใใใใใใใใใใใใใใใใใใใใใ

x.x*x การเร�ยกใชุ�

((x.x*x )2)

Page 14: Functional Programming

ตวิอิย#าง• ก(าหนด้ 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

Page 15: Functional Programming

อิงค ปัระกอิบขอิงภาษา (Components)

• ใชุ�การเร�ยกฟั�งก ชุนมาท(างาน แทนการระบ&ในร+ปัค(าสั่ง

• น�ยามข:2นจากน�พจน ต#างๆ • เปั.นลกษณะการท(างานตามหน�าท� (Functional) • ม�สั่#วินปัระกอิบด้งน�2

โครงสั่ร�างข�อิม+ลพ-2นฐาน ค-อิ list ใชุ�เก)บข�อิม+ล ฟั�งก ชุนพ-2นฐาน เพ-อิท(างานกบ list

โครงสั่ร�างท�ชุ#วิยสั่ร�างฟั�งก ชุนใหม#จากฟั�งก ชุนท�ม�อิย+#

Page 16: Functional Programming

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 หร-อิค(าสั่งก(าหนด้ค#าให�

ตวิแปัร• ค#าขอิงตวิแปัรเก�ด้จากการสั่#งผ#านค#าระหวิ#างฟั�ง

ก ชุ น

Page 17: Functional Programming

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)

Page 18: Functional Programming

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

Page 19: Functional Programming

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• เปั.นภาษาท�น�ยมใชุ�ในการเร�ยนการสั่อิน

Page 20: Functional Programming

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

Page 21: Functional Programming

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)

Page 22: Functional Programming

ปัระเภทขอิงน�พจน • น�พจน คณ�ตศาสั่ตร ให�ค#าเปั.นตวิเลข

> (+ 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)

Page 23: Functional Programming

ฟั�งก ชุนปัระมวิลผลข�อิม+ล• (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 หร-อิไม#

Page 24: Functional Programming

ฟั�งก ชุนปัระมวิลผลข�อิม+ล> (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)))

Page 25: Functional Programming

ฟั�งก ชุนเวิ�ยนบงเก�ด้(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

Page 26: Functional Programming

Imperative VS Functional

• แนวิค�ด้พ-2นฐานขอิงการสั่ร�างโปัรแกรม– ฟั�งก ชุนทางคณ�ตศาสั่ตร เชุ-อิมโยงค#าจากข�อิม+ลไปัยง

ผลลพธี – ก(าหนด้ค#าข�อิม+ลในร+ปัตวิแปัร ท(าการเปัล�ยนแปัลงค#า

โด้ยค(าสั่งต#างๆ ไปัสั่+#ผลลพธี • ควิามเปั.นอิ�สั่ระจากฮาร ด้แวิร

– ไม#เก�ยวิข�อิงกบโครงสั่ร�างภายในหน#วิยควิามจ(าหร-อิการเปัล�ยนสั่ถานะขอิงหน#วิยควิามจ(า

• การเข�ยนโปัรแกรม – syntax และ semantic ท�เร�ยบง#ายปัระกอิบด้�วิยน�พจน

ต#างๆ