งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

Functional Programming. Programming paradigms  Imperative  Objected-oriented  Functional  logic Procedural programming Non-procedural programming.

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "Functional Programming. Programming paradigms  Imperative  Objected-oriented  Functional  logic Procedural programming Non-procedural programming."— ใบสำเนางานนำเสนอ:

1 Functional Programming

2 Programming paradigms  Imperative  Objected-oriented  Functional  logic Procedural programming Non-procedural programming Or Declarative programming

3 Procedural programming วิธีการสั่งงานได้รับอิทธิพลโดยตรงจากสถาปัตยกรรมของ คอมพิวเตอร์ Von Neumann machine ประกอบดว้ย – หน่วยประมวลผลกลาง ควบคุมและประมวลผลคำสั่ง – หน่วยความจำ เก็บชุดคำสั่งของโปรแกรมและข้อมูลที่จะใช้ ใช้แนวคิดในการเปลี่ยนสถานะ ( ค่าในหน่วยความจำ ) ของ เครื่องไปตามลำดับ จนได้ผลลัพธ์ที่ต้องการ มักใช้คำสั่งกำหนดค่า (assignment statement) เป็นหลัก ใน การควบคุมการทำงาน มีคำสั่งประเภทอื่นๆ ประกอบในการกำหนดลำดับการทำงาน เช่น คำสั่งวนซ้ำ คำสั่งแบบมีเงื่อนไข

4 Program Modulo 1)Read M1 2)Read M2 3)M1 = M1 - M2 4)If M1 >= 0 then goto (3) 5)M1 = M1 + M2 6)Write M1 7)halt

5 สถานะของคอมพิวเตอร์ขณะประมวลผล โปรแกรม Modulo ลำดับการประมวลผล คำสั่ง (Thread) สถานะของคอมพิวเตอร์ (State) ข้อมูล เข้า ตำแหน่งในหน่วยความจำ ผลลัพธ์ M1M2 13, 4 (1) read M113 (2) read M2134 (3) M1 = M1-M294 (4) If M1 >= 0 goto (3)94

6 Non-procedural programming ออกแบบเพื่อลดอิทธิพลของลักษณะการทำงานของเครื่อง การเขียนโปรแกรมเป็นอิสระจากฮาร์ดแวร์ ภาษาเชิงหน้าที่ – ใช้ฟังก์ชั่นที่คล้ายกับฟังก์ชั่นทางคณิตศาสตร์ – ระบุการเชื่อมโยงค่าจากข้อมูลเข้าไปยังผลลัพท์ – ไม่ต้องระบุขั้นตอนการเปลี่ยนแปลงสถานะภายในเครื่อง ภาษาเชิงตรรกะ – ใช้ความสัมพันธ์เป็นส่วนประกอบหลักในการเขียนโปรแกรม – เป็นการพิสูจน์ความจริงของความสัมพันธ์ทั้งหลายที่ระบุไว้ – ไม่ต้องระบุลำดับการทำงานให้กับโปรแกรม

7 Functional programming  ส่วนประกอบที่สำคัญ  โครงสร้างข้อมูลพื้นฐาน คือ ลิสต์ (list)  ฟังก์ชั่นพื้นฐาน  โครงสร้างที่ใช้สร้างฟังก์ชั่นจากฟังก์ชั่นที่มีอยู่  โปรแกรมประกอบด้วยฟังก์ชั่น นิยามจากนิพจน์ (expression)  ค่าเดี่ยว  นิพจน์ย่อย  นิพจน์แบบมีเงื่อนไข

8 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)

9 การประมวลผล กลไกพื้นฐาน 2 ประการ การเชื่อมโยงระหว่างชื่อกับค่า (binding) การเรียกใช้ฟังก์ชั่น (application) fact(3) เชื่อมโยง 3 กับชื่อ n ในโปรแกรม เรียกใช้ฟังก์ชั่นที่ n มีค่าเป็น 3

10 ฟังก์ชัน (Function)  การเชื่อมโยงข้อมูลจากเซตของโดเมน ไปยัง ข้อมูลในเซตของเรนจ์ ( โค โดเมน )

11 การเชื่อมโยงข้อมูล (Mapping) Total function การเชื่อมโยงข้อมูลทุกตัวในเซตของโดเมน Partial function การเชื่อมโยงข้อมูลบางตัวในเซตของโดเมน ข้อมูลหนึ่งตัวจากเซตของโดเมนจะเชื่อมโยงไป ยังข้อมูลเพียงตัวเดียวในเซตของเรนจ์ การนิยามฟังก์ชั่นไม่กำกวม

12 การอธิบายการเชื่อมโยง  การแจกแจงทุกการเชื่อมโยง  แผนภาพ  กฏหรือสมการ  Format and actual parameters

13 แคลคูลัสแลมป์ดา (Lambda calculus) แคลคูลัสอย่างง่าย ใช้เป็นโมเดลอธิบายการทำงานของฟังก์ชั่น เป็นพื้นฐานในการออกแบบภาษาเชิงหน้าที่  ช  ค  ง  (lambda) แทนฟังก์ชั่น ต  งก  น  ฟ  งก  ช  น x.x*x  การเรียกใช้ (( x.x*x )2)

14 นิพจน์แลมป์ดา  นิพจน์ในแคลคูลัสแลมป์ดามีอยู่ 3 ประเภทคือ  ตัวระบุ หรือตัวแปรเดี่ยว (single identifier)  นิยามฟังก์ชัน (function definition, or abstraction) ( x. M)  การเรียกมใช้ฟังก์ชัน (function application) เขียนอยู่ในรูป MN (( x. X*x)2)  ตัวอย่างนิพจน์แลมป์ดา x ( x. x) (( x. x) ( y. y))

15 นิพจน์แลมป์ดา  อาจละเว้นวงเล็บได้  มีลำดับจากซ้ายไปขวา  Alonzo Church  สร้างแคลคูลัสแลมป์ดาขึ้นมาให้คำนวณฟังก์ชันที่มีพารามิเตอร์ตัวเดียว เช่น ( x. x*x)  Haskell B. Curry  ฟังก์ชันหลายพารามิเตอร์  Currying technique f(x, y) = x*y => ( x. ( y. x*y)) หรือ ( x. ( y. X*y)) 2 => ( y. 2*y)

16 การคำนวณค่านิพจน์แลมป์ดา  วิธีการแปลงรูปนิพจน์ (rewrite) จนได้รูปแบบปกติ (normal form) (( y. ( x. xyz)a)b) =>  แม้ใช้ลำดับที่ต่างกันในการ rewrite แต่ผลลัพธ์นำไปสู่รูปแบบปกติที่เหมือนกัน ซึ่งคุณสมบัติการมีรูปแบบเดียวขแงแคลคูลัสแลมป์ดา เรียกว่า มีคุณสมบัติตาม ทฤษฎีของเชิร์ชและรอสเซอร์ (Church-Rosser theorem)  การคำนวณค่านิพจน์แลมป์ดาจะกระทำตามกฏการแปลงรูปนิพจน์ (rewrite rules) หรือบางครั้งเรียกว่า กฏการลดรูปนิพจน์ (reduction rules)   -conversion   -reduction

17 การแปลงแบบอัลฟ่า (  -conversion)  x. M  => y. {y/x} M, y is not free in M  ถ้า x เป็น bond parameter เราสามารถเปลี่ยนชื่อตัวแปร x เป็น y แต่ทั้งนี้ ชื่อ y จะต้องไม่ปรากฏเป็นตัวแปรอิสระ ใน M  สัญลักษณ์ {y/x} หมายถึงการแทนชื่อ x ด้วย y  ตัวอย่าง ( xyz. xz(yz)) ( x. x) ( x. x) => ( xyz. xz(yz)) ( u. u) ( v. v)

18 การลดรูปแบบเบต้า (  -reduction)  x. M  => {N/x} M  จาก ( xyz. xz(yz)) ( u. u) ( v. v)  => ( xyz. xz(yz)) ( u. u) ( v. v)  => ( yz. ( u. u)z(yz)) ( v. v)  => ( z. ( u. u)z(( v. v)z))  => ( z. ( u. u)z(z))  => ( z. (z) (z))  => ( z. zz)


ดาวน์โหลด ppt Functional Programming. Programming paradigms  Imperative  Objected-oriented  Functional  logic Procedural programming Non-procedural programming.

งานนำเสนอที่คล้ายกัน


Ads by Google