functional programming n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Functional Programming PowerPoint Presentation
Download Presentation
Functional Programming

Loading in 2 Seconds...

play fullscreen
1 / 18

Functional Programming - PowerPoint PPT Presentation


  • 320 Views
  • Uploaded on

Functional Programming. Programming paradigms. Imperative Objected-oriented Functional logic. Procedural programming. Non-procedural programming Or Declarative programming. Procedural programming. วิธีการสั่งงานได้รับอิทธิพลโดยตรงจากสถาปัตยกรรมของคอมพิวเตอร์

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Functional Programming' - jayden


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
programming paradigms
Programming paradigms
  • Imperative
  • Objected-oriented
  • Functional
  • logic

Procedural programming

Non-procedural programming

Or Declarative programming

procedural programming
Procedural programming
  • วิธีการสั่งงานได้รับอิทธิพลโดยตรงจากสถาปัตยกรรมของคอมพิวเตอร์
  • Von Neumann machine ประกอบดว้ย
    • หน่วยประมวลผลกลาง ควบคุมและประมวลผลคำสั่ง
    • หน่วยความจำ เก็บชุดคำสั่งของโปรแกรมและข้อมูลที่จะใช้
  • ใช้แนวคิดในการเปลี่ยนสถานะ (ค่าในหน่วยความจำ) ของเครื่องไปตามลำดับ จนได้ผลลัพธ์ที่ต้องการ
  • มักใช้คำสั่งกำหนดค่า (assignment statement) เป็นหลัก ในการควบคุมการทำงาน
  • มีคำสั่งประเภทอื่นๆ ประกอบในการกำหนดลำดับการทำงาน เช่น คำสั่งวนซ้ำ คำสั่งแบบมีเงื่อนไข
program modulo
Program Modulo
  • Read M1
  • Read M2
  • M1 = M1 - M2
  • If M1 >= 0 then goto (3)
  • M1 = M1 + M2
  • Write M1
  • halt
non procedural programming
Non-procedural programming
  • ออกแบบเพื่อลดอิทธิพลของลักษณะการทำงานของเครื่อง
  • การเขียนโปรแกรมเป็นอิสระจากฮาร์ดแวร์
  • ภาษาเชิงหน้าที่
    • ใช้ฟังก์ชั่นที่คล้ายกับฟังก์ชั่นทางคณิตศาสตร์
    • ระบุการเชื่อมโยงค่าจากข้อมูลเข้าไปยังผลลัพท์
    • ไม่ต้องระบุขั้นตอนการเปลี่ยนแปลงสถานะภายในเครื่อง
  • ภาษาเชิงตรรกะ
    • ใช้ความสัมพันธ์เป็นส่วนประกอบหลักในการเขียนโปรแกรม
    • เป็นการพิสูจน์ความจริงของความสัมพันธ์ทั้งหลายที่ระบุไว้
    • ไม่ต้องระบุลำดับการทำงานให้กับโปรแกรม
functional programming1
Functional programming
  • ส่วนประกอบที่สำคัญ
    • โครงสร้างข้อมูลพื้นฐาน คือ ลิสต์ (list)
    • ฟังก์ชั่นพื้นฐาน
    • โครงสร้างที่ใช้สร้างฟังก์ชั่นจากฟังก์ชั่นที่มีอยู่
  • โปรแกรมประกอบด้วยฟังก์ชั่น นิยามจากนิพจน์ (expression)
    • ค่าเดี่ยว
    • นิพจน์ย่อย
    • นิพจน์แบบมีเงื่อนไข
imperative vs functional
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)
slide9
การประมวลผล

กลไกพื้นฐาน 2 ประการ

  • การเชื่อมโยงระหว่างชื่อกับค่า (binding)
  • การเรียกใช้ฟังก์ชั่น (application)

fact(3)

  • เชื่อมโยง 3 กับชื่อ n ในโปรแกรม
  • เรียกใช้ฟังก์ชั่นที่ n มีค่าเป็น 3
function
ฟังก์ชัน (Function)
  • การเชื่อมโยงข้อมูลจากเซตของโดเมน ไปยัง ข้อมูลในเซตของเรนจ์ (โคโดเมน)
mapping
การเชื่อมโยงข้อมูล (Mapping)
  • Total function
    • การเชื่อมโยงข้อมูลทุกตัวในเซตของโดเมน
  • Partial function
    • การเชื่อมโยงข้อมูลบางตัวในเซตของโดเมน
  • ข้อมูลหนึ่งตัวจากเซตของโดเมนจะเชื่อมโยงไปยังข้อมูลเพียงตัวเดียวในเซตของเรนจ์
  • การนิยามฟังก์ชั่นไม่กำกวม
slide12
การอธิบายการเชื่อมโยงการอธิบายการเชื่อมโยง
  • การแจกแจงทุกการเชื่อมโยง
  • แผนภาพ
  • กฏหรือสมการ
  • Format and actual parameters
lambda calculus
แคลคูลัสแลมป์ดา (Lambda calculus)
  • แคลคูลัสอย่างง่าย
  • ใช้เป็นโมเดลอธิบายการทำงานของฟังก์ชั่น
  • เป็นพื้นฐานในการออกแบบภาษาเชิงหน้าที่
  • ใช้เครื่องหมาย l (lambda)แทนฟังก์ชั่น
  • ตัวอย่างการนิยามฟังก์ชั่น

lx.x*x

  • การเรียกใช้

((lx.x*x )2)

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

x

(lx. x)

((lx. x) (ly. y))

slide15
นิพจน์แลมป์ดา
  • อาจละเว้นวงเล็บได้
  • มีลำดับจากซ้ายไปขวา
  • Alonzo Church
    • สร้างแคลคูลัสแลมป์ดาขึ้นมาให้คำนวณฟังก์ชันที่มีพารามิเตอร์ตัวเดียวเช่น (lx. x*x)
  • Haskell B. Curry
    • ฟังก์ชันหลายพารามิเตอร์
  • Currying technique f(x, y) = x*y => (lx. (ly. x*y)) หรือ (lx. (ly. X*y)) 2 => (ly. 2*y)
slide16
การคำนวณค่านิพจน์แลมป์ดาการคำนวณค่านิพจน์แลมป์ดา
  • วิธีการแปลงรูปนิพจน์ (rewrite) จนได้รูปแบบปกติ (normal form)((ly. (lx. xyz)a)b) =>
  • แม้ใช้ลำดับที่ต่างกันในการ rewrite แต่ผลลัพธ์นำไปสู่รูปแบบปกติที่เหมือนกัน ซึ่งคุณสมบัติการมีรูปแบบเดียวขแงแคลคูลัสแลมป์ดา เรียกว่า มีคุณสมบัติตามทฤษฎีของเชิร์ชและรอสเซอร์ (Church-Rosser theorem)
  • การคำนวณค่านิพจน์แลมป์ดาจะกระทำตามกฏการแปลงรูปนิพจน์ (rewrite rules) หรือบางครั้งเรียกว่า กฏการลดรูปนิพจน์ (reduction rules)
    • -conversion
    • -reduction
conversion
การแปลงแบบอัลฟ่า (-conversion)
  • lx. M => ly. {y/x} M, y is not free in M
  • ถ้า x เป็น bond parameter เราสามารถเปลี่ยนชื่อตัวแปร x เป็น y แต่ทั้งนี้ ชื่อ y จะต้องไม่ปรากฏเป็นตัวแปรอิสระใน M
  • สัญลักษณ์ {y/x} หมายถึงการแทนชื่อ x ด้วย y
  • ตัวอย่าง(lxyz. xz(yz)) (lx. x) (lx. x) => (lxyz. xz(yz)) (lu. u) (lv. v)
reduction
การลดรูปแบบเบต้า (-reduction)
  • lx. M => {N/x} M
  • จาก (lxyz. xz(yz)) (lu. u) (lv. v) => (lxyz. xz(yz)) (lu. u) (lv. v) => (lyz. (lu. u)z(yz)) (lv. v) => (lz. (lu. u)z((lv. v)z)) => (lz. (lu. u)z(z)) => (lz. (z) (z)) => (lz. zz)