Functional Programming

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Suphot Sawattiwong Function ใน C# Suphot Sawattiwong
Advertisements

Introduction to C Introduction to C.
รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
โครงสร้างโปรแกรมภาษา C
ความรู้พื้นฐานเกี่ยวกับการเขียนโปรแกรม
การจำลองความคิด รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
บทที่ 2 ภาษาปาลคาลเบื้องต้น.
Introduction to C Programming
แนะนำการเขียนโปรแกรมภาษา C Introduction to C Programming Language
Chapter 1 โครงสร้างข้อมูลและอัลกอริธึมส์
โครงสร้างการควบคุมการทำงานของโปรแกรม Program control structures
Control structure part II
Functional programming part II
Functional programming part II
Data Structures and Algorithms
Lecture No. 3 ทบทวนทฤษฎีและแบบฝึกหัด
Structure Programming
Structure Programming
ชนิดของข้อมูลและตัวดำเนินการ
การแก้ปัญหาด้วยคอมพิวเตอร์
คำสั่ง while ควบคุมการทำงานวนซ้ำ กรณีระบบงานมีลักษณะตรวจสอบเงื่อนไขก่อน แล้วเข้าสู่ส่วนลำดับงานคำสั่งที่กำหนดไว้ การเขียนคำสั่ง while ต้องกำหนดนิพจน์แบบตรรกะเป็นเงื่อนไขมีค่าในหน่วยความจำเป็น.
องค์ประกอบของโปรแกรม
แผนผัง FlowChart Flow Chart คือ ขั้นตอนที่นำผลที่ได้จากการกำหนดและการ วิเคราะห์ปัญหามาเขียนเป็นแผนภาพหรือสัญลักษณ์ ประโยชน์ของผังงาน -ช่วยลำดับขั้นตอนการทำงานของโปรแกรม.
หลักการทำงานคอมพิวเตอร์
หน่วยที่ 1 ระบบคอมพิวเตอร์
วิชา การออกแบบและพัฒนาซอฟต์แวร์
ภาษาโปรแกรมเชิงหน้าที่
ปฏิบัติการครั้งที่ 9 ฟังก์ชัน.
Logic Programming โปรแกรมเชิงตรรกะ.
บทที่ 1. พื้นฐานความรู้ทั่วไป
หน่วยที่ 5 ตัวดำเนินการ (Operators)
Arrays.
Surachai Wachirahatthapong
แนะนำการเขียนโปรแกรมภาษา C Introduction to C Programming Language
ไวยากรณ์ของภาษาการทำโปรแกรม (1) (Syntax of programming languages)
Chapter 3 เครื่องหมายและการคำนวณ
ครูรัตติยา บุญเกิด.
แถวลำดับ (array) ง40202 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์
นิพจน์และตัวดำเนินการ
การเขียนผังงาน จุดประสงค์ 1.อธิบายความของผังงานได้
โครงสร้างข้อมูลคืออะไร ?
Week 2 Variables.
Computer Programming for Engineers
วิทยา กรระสี (วท.บ. วิทยาการคอมพิวเตอร์)
หลักการเขียนโปรแกรม ( )
การเขียนโปรแกรมเบื้องต้น
หลักการเขียนโปรแกรม ( )
กองซ้อน ยอดกองซ้อน (stack).
ตัวดำเนินการ และนิพจน์คณิตศาสตร์
หลักการสร้างสรรค์ชุดคำสั่ง ๓
PHP การตรวจสอบเงื่อนไข.
การสร้างแบบสอบถาม และ การกำหนดเงื่อนไข.
Recursive Method.
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
สาขาวิชาเทคโนโลยี สารสนเทศ คณะเทคโนโลยีสารสนเทศ และการสื่อสาร.
หลักการเขียนโปรแกรม ( )
โครงสร้าง ภาษาซี.
ระบบคอมพิวเตอร์ (computer system)
แนะนำการเขียนโปรแกรมภาษา C Introduction to C Programming Language
การกระทำทางคณิตศาสตร์
ตัวแปร และชนิดข้อมูล.
Function ธนวัฒน์ แซ่ เอียบ. What is a function ฟังก์ชันในภาษา C เป็นโปรแกรมที่ถูกออกแบบมาเพื่อ ใช้แก้ปัญหางานใดงานหนึ่งโดยเฉพาะ ฟังก์ชันจะเปลี่ยน input.
การรับและแสดงผลข้อมูล (Input/Output)
โครงสร้างข้อมูลแบบ สแตก (stack)
หน่วยรับเข้า ทำหน้าที่รับข้อมูลจากผู้ใช้เข้าสู่หน่วยความจำหลัก ปัจจุบันมีสื่อต่าง ๆ ให้เลือกใช้ได้มากมาย แบ่งเป็นประเภทต่าง ๆ 1.แป้นพิมพ์ (Keyboard) 2.เมาส์
Programming assignments ชื่องาน (subject) : program เขียนด้วยภาษา C หรือ C++ มีทั้งหมด 7 ข้อ กำหนดส่ง 29 กรกฎาคม 2554.
บทที่ 5 โปรแกรมย่อย.
Computer Program คือ ขั้นตอนการทำงาน ของคอมพิวเตอร์
ค31212 คณิตศาสตร์สำหรับ คอมพิวเตอร์ 2
ส่วนประกอบของคอมพิวเตอร์
ใบสำเนางานนำเสนอ:

Functional Programming

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

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

Program Modulo Read M1 Read M2 M1 = M1 - M2 If M1 >= 0 then goto (3) M1 = M1 + M2 Write M1 halt

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

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

Functional programming ส่วนประกอบที่สำคัญ โครงสร้างข้อมูลพื้นฐาน คือ ลิสต์ (list) ฟังก์ชั่นพื้นฐาน โครงสร้างที่ใช้สร้างฟังก์ชั่นจากฟังก์ชั่นที่มีอยู่ โปรแกรมประกอบด้วยฟังก์ชั่น นิยามจากนิพจน์ (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) ประกอบด้วยนิพจน์ สั่งให้ทำซ้ำโดยใช้ recursive function เรียกใช้ฟังก์ชั่นให้ทำงาน แทนการระบุในรูปคำสั่ง เช่น fact(3)

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

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

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

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

แคลคูลัสแลมป์ดา (Lambda calculus) แคลคูลัสอย่างง่าย ใช้เป็นโมเดลอธิบายการทำงานของฟังก์ชั่น เป็นพื้นฐานในการออกแบบภาษาเชิงหน้าที่ ใช้เครื่องหมาย l (lambda) แทนฟังก์ชั่น ตัวอย่างการนิยามฟังก์ชั่น lx.x*x การเรียกใช้ ((lx.x*x )2)

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

นิพจน์แลมป์ดา อาจละเว้นวงเล็บได้ มีลำดับจากซ้ายไปขวา 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)

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

การแปลงแบบอัลฟ่า (-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) 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)