PRESENTATION NAME

Download Report

Transcript PRESENTATION NAME

Functional Programming
Tasanawan Soonklang
Programming paradigms
•
•
•
•
Imperative
Object-oriented
Functional
Logic
Procedural programming
Non-procedural programming
or Declarative programming
Procedural programming
• วิธก
ี ารสงั่ งานได ้รับอิทธิพลโดยตรงจาก
สถาปั ตยกรรมของคอมพิวเตอร์
• Von Neumann machine ประกอบดว ้ย
– หน่วยประมวลผลกลาง ควบคุมและประมวลผล
คาสงั่
– หน่วยความจา เก็บชุดคาสงั่ ของโปรแกรมและ
ข ้อมูลทีจ
่ ะใช ้
้
• ใชแนวคิ
ดในการเปลีย
่ นสถานะ (ค่าใน
หน่วยความจา) ของเครือ
่ งไปตามลาดับ จน
ได ้ผลลัพธ์ทต
ี่ ้องการ
• มักใชค้ าสงั่ กาหนดค่า (assignment
statement) เป็ นหลัก ในการควบคุมการ
ทางาน
• มีคาสงั่ ประเภทอืน
่ ๆ ประกอบในการกาหนด
Program Modulo
1)
2)
3)
4)
5)
6)
7)
Read M1
Read M2
M1 = M1 - M2
If M1 >= 0 then goto (3)
M1 = M1 + M2
Write M1
halt
Non-procedural programming
• ออกแบบเพือ
่ ลดอิทธิพลของลักษณะการ
ทางานของเครือ
่ ง
• การเขียนโปรแกรมเป็ นอิสระจากฮาร์ดแวร์
• ภาษาเชงิ หน ้าที่
ั่ ทีค
ั่ ทางคณิตศาสตร์
– ใชฟั้ งก์ชน
่ ล ้ายกับฟั งก์ชน
ื่ มโยงค่าจากข ้อมูลเข ้าไปยัง
– ระบุการเชอ
ผลลัพท์
– ไม่ต ้องระบุขน
ั ้ ตอนการเปลีย
่ นแปลงสถานะ
ภายในเครือ
่ ง
• ภาษาเชงิ ตรรกะ
้
ั พันธ์เป็ นสว่ นประกอบหลักในการ
– ใชความส
ม
เขียนโปรแกรม
ั พันธ์
– เป็ นการพิสจ
ู น์ความจริงของความสม
FunctionalTitle
Programming
นประกอบที
ส
่ าคั
ญ sit amet, consectetuer
•สว่ Lorem
ipsum
dolor
Fusce sed
• adipiscing
โครงสร ้างขelit.
้อมูลVivamus
พืน
้ ฐาน คืet
อ magna.
ลิสต์ (list)
ั่ พืน
• sem
ฟั งก์ชsed
น
้magna
ฐาน suscipit egestas.
•• Lorem
dolor
amet,
consectetuer
้ ้างฟัsit
ั่ จากฟั
ั่ ทีม
โครงสรipsum
้างทีใ่ ชสร
งก์ช
น
งก์ชน
่ อ
ี ยู่
adipiscing elit. Vivamus et magna. Fusce sed
ั่ egestas.
โปรแกรมประกอบด
งก์ชน
นิยามจากนิพจน์
sem sed magna ้วยฟั
suscipit
• (expression)
Lorem ipsum dolor sit amet, consectetuer
• ค่
าเดีย
่ ว elit. Vivamus et magna. Fusce sed
adipiscing
• นิ
พจน์sed
ยอ
่ ยmagna suscipit egestas.
sem
• นิพจน์แบบมีเงือ
่ นไข
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)
• ประกอบด ้วยนิพจน์
• สงั่ ให ้ทาซ้าโดยใช ้
recursive function
ั่ ให ้
• เรียกใชฟั้ งก์ชน
ทางาน แทนการระบุ
่
ในรูปคาสงั่ เชน
fact(3)
การประมวลผล
กลไกพืน
้ ฐาน 2 ประการ
ื่ มโยงระหว่างชอ
ื่ กับค่า
• การเชอ
(binding)
ั่ (application)
• การเรียกใชฟั้ งก์ชน
fact(3)
ื่ มโยง 3 กับชอ
ื่ n ในโปรแกรม
• เชอ
ั่ ที่ n มีคา่ เป็ น 3
• เรียกใชฟั้ งก์ชน
ั่ (function)
ฟั งก์ชน
ื่ มโยงข ้อมูลจากเซตของ
• การเชอ
โดเมน ไปยัง ข ้อมูลในเซตของเรนจ์
(โคโดเมน)
X1
f(X1)
X2
X3
f(X2) = f(X3)
X4
f(X4)
ื่ มโยงข ้อมูล (mapping)
การเชอ
ื่ มโยงข ้อมูล
• Total function การเชอ
ทุกตัวในเซตของโดเมน
ื่ มโยงข ้อมูล
• Partial function การเชอ
บางตัวในเซตของโดเมน
• ข ้อมูลหนึง่ ตัวจากเซตของโดเมนจะ
ื่ มโยงไปยังข ้อมูลเพียงตัวเดียว
เชอ
ในเซตของเรนจ์
ั่ ไม่กากวม
• การนิยามฟั งก์ชน
ื่ มโยง
การอธิบายการเชอ
ื่ มโยง
รูปแบบการอธิบายการเชอ
ื่ มโยง
• การแจกแจงทุกการเชอ
• แผนภาพ
• กฎหรือสมการ
...
...
sign(-2) = minus
sign(-1) = minus
sign(0) = zero
sign(1) = plus
sign(1) = plus
…
…
.
.
-2
-1
0
1
2
.
.
minus
zero
plus
minus if x <0
sign(x) = zero if x = 0
plus if x > 0
ื่ มโยงข ้อมูล (mapping)
การเชอ
ื่ มโยงข ้อมูล
• Total function การเชอ
ทุกตัวในเซตของโดเมน
ื่ มโยงข ้อมูล
• Partial function การเชอ
บางตัวในเซตของโดเมน
• ข ้อมูลหนึง่ ตัวจากเซตของโดเมนจะ
ื่ มโยงไปยังข ้อมูลเพียงตัวเดียว
เชอ
ในเซตของเรนจ์
ั่ ไม่กากวม
• การนิยามฟั งก์ชน
แคลคูลัสแลมป์ ดา
• แคลคูลัสอย่างง่าย
้ นโมเดลอธิบายการทางานของ
• ใชเป็
ั่
ฟั งก์ชน
• เป็ นพืน
้ ฐานในการออกแบบภาษาเชงิ
หน ้าที่
้ อ
• ใชเครื
่ งหมาย l (lambda) แทน
ั่
ฟั งก์ชน
ั่
• ตัวอย่างการนิยามฟั งก์ชน
lx.x*x
การเรียกใช ้
ตัวอย่าง
• กาหนด square  lx.x*x
• จงหา to-the-fourth  square o square
 l(square,square).lx.square(square(x))
 lx.(lx.x*x(lx.x*x(x)))
 lx.(lx.x*x(.x*x))
 lx.((.x*x)(x*x))
 (2*2) * (2*2)
 4*4
องค์ประกอบของภาษา
(Components)
้
ั มาทางาน แทนการ
• ใชการเรี
ยกฟั งก์ชน
ระบุในรูปคาสงั่
• เป็ นลักษณะการทางานตามหน ้าที่
(Functional)
• มีองค์ประกอบดังนี้
ั เบือ
 ฟั งก์ชน
้ งต ้น (Primitive
Function)
ั่ (Functional
 รูปแบบของฟั งก์ชน
Forms)
ภาษา FP
• John Backus ได ้คิดภาษา FP เป็ นภาษาเชงิ
หน ้าที่ ในปี 1970
• เป็ นภาษาทีม
่ ก
ี ารทางานไม่ขน
ึ้ กับ
สถาปั ตยกรรมของเครือ
่ ง
• มีออบเจกต์ n ตัว คือ x1, x2 ,…, xn
เขียนแทนด ้วย < x1, x2 ,…, xn >
้ กการของฟั งก์ชน
ั ทาง
• สร ้างขึน
้ โดยใชหลั
คณิตศาสตร์
ั เบือ
ั ดังนี้
• มีฟังก์ชน
้ งต ้นและรูปแบบฟั งก์ชน
ั เบือ
ฟั งก์ชน
้ งต ้น (Primitive
Functions)
• Selection Operations
FIRST : < x1 , x2 ,…, xn >  x1
LAST : < x1 , x2 ,…, xn >  xn
TAIL : < x1 , x2 ,…, xn >  < x2 ,…, xn >
i : < x1 , x2 ,…, xn >  xi , 1 < i < n
ั เบือ
ฟั งก์ชน
้ งต ้น (ต่อ)
• Structuring Operations
ROTR : < x1 , x2 ,…, xn >  < xn , x1 ,…, xn-1 >
ROTL : < x1 , x2 ,…, xn >  < x2 , x3 ,…, xn , x1 >
LENGTH : < x1 , x2 ,…, xn >  n
CONS : < x, <x1 , x2 ,…, xn >>  <x, x1 , x2 ,…, xn >
ั เบือ
ฟั งก์ชน
้ งต ้น (ต่อ)
• Arithmetic Operations
+ : < x, y >  x + y
- : < x, y >  x - y
* : < x, y >  x * y
/ : < x, y >  x / y
• Identity
ID : x  x
ั เบือ
ฟั งก์ชน
้ งต ้น (ต่อ)
• Predicate Functions
ATOM : x  T if x atom
NULL : x  T if x is O
EQ : <x,y>  T if x = y
AND : <x,y>  T if both are T
OR : <x,y>  T if one is T
NOT : <x>  T if x is F
ั (Functional
รูปแบบฟั งก์ชน
Forms)
• Composition
(fog) :x f:(g:x)
ROTL o CONS : < x1, <x2 , x3>> 
ROTL : CONS : < x1, <x2 , x3>> 
ROTL : < x1, x2 , x3> 
< x2, x3 , x1>
ั (ต่อ)
รูปแบบฟั งก์ชน
• Construction
[f1, f2 ,…, fn] : x  < f1 : x1 ,…, fn : x>
[MIN, MAX, AVG, MED] : <0,1,2,3>

<MIN: <0,1,2,3>,MAX:<0,1,2,3>,
AVG:<0,1,2,3>,MED:<0,1,2,3>> 
<0,3,1.5,2>
ั (ต่อ)
รูปแบบฟั งก์ชน
• Insert
/f : x  if x is <x1> then x1
else if x is the sequence <x1, x2 , ..., xn >
and n>= 2 then f : <x1, /f : <x2 , ..., xn >
ตัวอย่าง
/+ : <1,2,3,4>  + : <1, /+: <2,3,4>>
 + : <1, +: <2, /+ : <3,4>>>
 + : <1, +: <2, + : <3, /+ : <4>>>>
 + : <1, +: <2, + : <3,4>>>
 + : <1, +: <2, 7>>
 + : <1, 9>>
 10
TitleLISP
ภาษา
•LISP
Lorem
dolor sit
amet, consectetuer
- Listipsum
and Symbol
Processing
Language
magna. Fusce sed
• adipiscing
ภาษาระดับelit.
สูงเก่Vivamus
าแก่อน
ั ดัet
บสองรองจากภาษา
sem
magna suscipit egestas.
ฟอร์แsed
ทรน
•• Lorem
dolor sit amet,
ั ลักษณ์
สร ้างขึน
้ ipsum
เพือ
่ นประมวลผลกั
บข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
ั่ egestas.
• การท
างานผ่
านฟัsuscipit
งก์ชน
sem sed
magna
• ไม่มก
ี ารใชตั้ วแปร global หรือคาสงั่ กาหนดค่า
ให ้ตัวแปร
LISP (List Processor)
• Function
–
–
–
–
Identity function
Selection Operations
Structuring Operations
Predicate Functions
QUOTE
CAR, CDR
CONS
ATOM, NULL, EQ, COND
• DEFINE(ADD(LAMBDA(X Y) (PLUS X Y)))
• Functional forms
(LAMBDA(x) (SQUARE(SQUARE x))5)
• Objects
ATOM, LIST
Imperative VS Functional
• แนวคิดพืน
้ ฐานของการสร ้าง
โปรแกรม
้
• เวลาทีใ่ ชในการท
างาน
• การเขียนโปรแกรม
ิ ธิภาพของภาษา
• ประสท