Functional programming part II

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Bansomdej Chaopraya Rajabhat University
Advertisements

บทที่ 2 รหัสควบคุมและการคำนวณ
รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
ความรู้พื้นฐานเกี่ยวกับการเขียนโปรแกรม
บทที่ 2 ภาษาปาลคาลเบื้องต้น.
BC320 Introduction to Computer Programming
Introduction to C Programming
ไวยากรณ์ของภาษาการทำโปรแกรม (2) (Syntax of programming languages)
Control Statement if..else switch..case for while do-while.
โครงสร้างการควบคุมการทำงานของโปรแกรม Program control structures
Ordering and Liveness Analysis ลำดับและการวิเคราะห์บอกความ เป็นอยู่หรือความตาย.
Control structure part II
Functional Programming
Functional programming part II
C Programming Lecture no. 4 กราบเรียนท่านอาจารย์ และสวัสดีเพื่อนๆ
Structure Programming
ชนิดของข้อมูลและตัวดำเนินการ
คำสั่ง while ควบคุมการทำงานวนซ้ำ กรณีระบบงานมีลักษณะตรวจสอบเงื่อนไขก่อน แล้วเข้าสู่ส่วนลำดับงานคำสั่งที่กำหนดไว้ การเขียนคำสั่ง while ต้องกำหนดนิพจน์แบบตรรกะเป็นเงื่อนไขมีค่าในหน่วยความจำเป็น.
บทที่ 2 Operator and Expression
บทที่ 3 พื้นฐานการเขียนโปรแกรม Visual Basic
Visual Basic 6 By Samaporn Yendee VB6.
รับและแสดงผลข้อมูล.
PHP LANGUAGE.
แผนผัง FlowChart Flow Chart คือ ขั้นตอนที่นำผลที่ได้จากการกำหนดและการ วิเคราะห์ปัญหามาเขียนเป็นแผนภาพหรือสัญลักษณ์ ประโยชน์ของผังงาน -ช่วยลำดับขั้นตอนการทำงานของโปรแกรม.
Lab 3: คำสั่งพื้นฐานสำหรับการรับและการแสดงผลข้อมูล
Properties ของคอนโทรล ที่ควรรู้จักในเบื้องต้น
ภาษาโปรแกรมเชิงหน้าที่
บทที่ 13 Pre-processor directive & macro Kairoek choeychuen
ฟังก์ชันของ PHP ฟังก์ชันคือ โปรแกรมย่อยที่สามารถประมวลผล และ คืนผลลัพธ์จาการประมวลผลนั้นสู่โปรแกรมหลักได้ ซึ่งจำเป็นในการเขียนโปรแกรมเพื่อช่วยให้การทำงานมีประสิทธิภาพที่สูงขึ้น.
Surachai Wachirahatthapong
Selected Topics in IT (Java)
การเขียนโปรแกรมเชิงวัตถุ ด้วยภาษาจาวา
บทที่ 3 ตัวดำเนินการ และ นิพจน์
ตัวแปร (variable) ตัวแปร เป็นชื่อที่เราตั้งขึ้น เพื่อให้คอมพิวเตอร์เตรียมที่ใน หน่วยความจำไว้สำหรับเก็บข้อมูลที่นำไปประมวลผล การตั้งชื่อตัวแปร ชื่อตัวแปรในภาษา.
ไวยากรณ์ของภาษาการทำโปรแกรม (1) (Syntax of programming languages)
คำสั่งควบคุมการทำงาน
ตัวดำเนินการ(Operator)
Chapter 6 Decision Statement
ครูรัตติยา บุญเกิด.
ง40208 การเขียนไดนามิกเว็บเพจ ศูนย์คอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
นิพจน์และตัวดำเนินการ
คำสั่งควบคุมการทำงานของ ActionScripts
ทบทวน กันก่อน .....กระบวนการแปลโปรแกรม
Week 2 Variables.
เสรี ชิโนดม ฟังก์ชัน เสรี ชิโนดม
Computer Programming for Engineers
พื้นฐานการเขียนโปรแกรม
บทที่ 8 ตัวดำเนินการ และ นิพจน์
คำสั่งควบคุมขั้นตอน Flow control statements
วิทยา กรระสี (วท.บ. วิทยาการคอมพิวเตอร์)
ฟังก์ชัน.
บทที่ 4 นิพจน์ทางคณิตศาสตร์.
หลักการเขียนโปรแกรม ( )
ตัวดำเนินการ และนิพจน์คณิตศาสตร์
PHP การตรวจสอบเงื่อนไข.
การสร้างแบบสอบถาม และ การกำหนดเงื่อนไข.
การเขียนโปรแกรมคอมพิวเตอร์ 1
Recursive Method.
สาขาวิชาเทคโนโลยี สารสนเทศ คณะเทคโนโลยีสารสนเทศ และการสื่อสาร.
หลักการเขียนโปรแกรม ( )
ความรู้พื้นฐานเกี่ยวกับการโปรแกรมคอมพิวเตอร์
CONDITION Computer Programming Asst. Prof. Dr. Choopan Rattanapoka.
บทที่ 6 คำสั่งเงื่อนไข.
แนะนำการเขียนโปรแกรมภาษา C Introduction to C Programming Language
บทที่ 2 โครงสร้างของภาษา C.
การกระทำทางคณิตศาสตร์
ตัวแปร และชนิดข้อมูล.
Syntax and Semantics ธนวัฒน์ แซ่เอียบ.
Computer Program คือ ขั้นตอนการทำงาน ของคอมพิวเตอร์
CHAPTER 2 Operators.
ใบสำเนางานนำเสนอ:

Functional programming part II

Lambda calculus Pure lambda calculus นิพจน์มีเพียง 3 ประเภทคือ ตัวแปรเดี่ยว, คำนิยามฟังก์ชัน และการเรียกใช้ฟังก์ชัน ไม่ได้รวม ค่าคงที่ และ ฟังก์ชันการคำนวณคณิตศาสตร์ ยิ่งไปกว่านั้น ในแคลคูลัสแลมป์ดาแท้ไม่มีการใช้จำนวนเลข แต่จะกำหนดทุกอย่างให้อยู่ในรูปของตัวแปร และฟังก์ชัน เช่น กำหนดให้ x แทนค่าศูนย์ และ f(x) เป็นฟังก์ชันที่เพิ่มค่า x ขึ้นหนึ่งค่า เราสามารถเขียน ค่าคงที่เป็นจำนวนเลขในรูปแบบของแคลคูลัสแลมป์ดาแท้ ได้ดังนี้ 0  f. x. x 1  f. x. f(x) 2  f. x. f(f(x)) 3  f. x. f(f(f(x))) . n  f. x. fn(x)

Lambda calculus (cont) Applied lambda calculus อนุญาตให้นิพจน์เป็นค่าคงที่ และฟังก์ชันพื้นฐานต่างๆ ได้ (เพื่อใช้โอเปอเรเตอร์ เช่น +, *) ดังนั้น กฏการคำนวณค่าของนิพจน์แลมป์ดา จึงต้องมีการกำหนดเพิ่มเติม เพื่อให้สามารถคำนวณค่าคงที่และฟังก์ชัน พื้นฐานต่างๆ ได้ กฏข้อที่ 3 การกำจัดฟังก์ชันซ้ำซ้อน หรือเรียกว่า การแปลงแบบเอทต้า (-conversion) (x. E x)  => E , x is not free in E

Lambda calculus (cont) กฏข้อที่ 4 การลดรูปนิพจน์ที่มีค่าคงที่ หรือเรียกว่า การลดรูปแบบเดลต้า (-reduction) เช่น ถ้า if, true, false เป็นค่าคงที่กฏการลดรูปค่าคงที่เหล่านี้ คือ if true M N  => M if false M N  => M โดยค่าคงที่ true และ false นิยามได้ตามลำดับดังนี้ x. y. x x. y. Y

สรุป lambda calculus Lambda calculus เป็นรูปแบบอย่างเป็นทางการที่ถูกสร้างขึ้นมา เพื่ออธิบายขั้นตอนการ ทำงานของฟังก์ชัน โดยการแปลงรูปของสัญลักษณ์ไปสู่รูปแบบปกติ ซึ่งจะเป็นผลลัพธ์สุดท้ายของ ฟังก์ชัน ฟังก์ชัน ถือเป็นค่าที่มีความสำคัญสูงสุด (first-class value) นิพจน์ พารามิเตอร์ในฟังก์ชันอื่น ข้อมูล เหมือนกับข้อมูลพื้นฐานอื่นๆ ไม่มีผลข้างเคียง (no side-effect) เป็นต้นแบบของภาษา LISP, Scheme, ML, Miranda, Haskell

ภาษาลิสป์และสคีม ภาษา LISP (List and Symbol Processing Language) ถูกสร้างขึ้นโดย John Macarthy ในปีค.ศ. 1958 ที่ MIT เป็นภาษาระดับสูงที่มีอายุเก่าแก่เป็นอันดับสองรองจากภาษาฟอร์แทรน ถูกสร้างขึ้นมาเพื่อประมวลผลกับข้อความประเภทสัญลักษณ์ต่างๆ เหมาะกับ AI ถ้าเป็นการประมวลผลกับตัวเลขจะช้ากว่าฟอร์แทรนมาก

LISP (cont) การทำงานทุกอย่าง กระทำผ่านฟังก์ชัน ไม่มีการใช้ตัวแปรส่วนกลาง และไม่มีการใช้คำสั่งกำหนดค่าให้ตัวแปร ค่าของตัวแปรจะเกิดจาก การส่งผ่านระหว่างฟังก์ชันเท่านั้น ยกเว้น ภาษา LISP ในรุ่นหลัง เช่น Common LISP อนุญาตให้ใช้คำสั่งกำหนดค่า จึงทำให้ไม่เป็นภาษาเชิงหน้าที่ อย่างแท้จริง เป็นภาษาแรกที่ริเริ่มให้มีการใช้ฟังก์ชันเรียกตัวเองซ้ำ (recursion) ใช้ฟังก์ชันเป็น first-class value นั่นคือ ฟังก์ชันปรากฏในนิพจน์ได้, ถูกส่งเป็นพารามิเตอร์ ได้ และใช้เป็นข้อมูลได้ เป็นภาษาแรกที่กำหนดวิธีการเรียกคืนหน่วยความจำที่ไม่ได้ถูกใช้งานแล้ว (garbage collection)

LISP (cont) เขียนอยู่ภายในวงเล็บด้วยรูปแบบนิพจน์พรีฟิกซ์ ฟังก์ชันการบวกในแคลคูลัสแลมป์ดา โปรแกรมในภาษา LISP การเรียกใช้ฟังก์ชันด้วยการส่งค่า 2 และ 3 จะกระทำเช่นเดียวกับแคลคูลัสแลมป์ดา (x. y. x + y) (LAMBDA (x y) (PLUS x y)) ((LAMBDA (x y) (PLUS x y)) 2 3)

LISP (cont) ฟังก์ชันในภาษา LISP สามารถถูกตั้งชื่อได้ด้วยคำสั่ง (หรือฟังก์ชัน) DEFINE ดังนี้ ซึ่งจะช่วยให้เราสามารถเรียกใช้ฟังก์ชันได้สะดวกขึ้น ดังนี้ (DEFINE (ADD (LAMBDA (x y) (PLUS x y)))) (ADD 2 3)

Scheme เป็นภาษาที่มีรากฐานมาจากภาษา LISP แต่ปรับปรุงภาษาให้มีขนาดเล็กลง ตัวแปลภาษาจะมีลักษณะของอินเตอร์พรีตเตอร์ โดยการสั่งงานจะเป็นลักษณะโต้ตอบ เช่น เมื่อจะเลิกใช้งาน ให้ใช้คำสั่ง หรือ หรือกด ctrl + D > (+ 4 5) 9 > (quit) > (exit)

โปรแกรม และนิพจน์ (program and expression) โปรแกรมในภาษาลิสป์ และสคีม จะประกอบขึ้นจากนิพจน์ซึ่งเขียนอยู่ภายในวงเล็บ ด้วย รูปแบบพรีฟิกซ์ Operator and operand การใช้รูปแบบพรีฟิกซ์จะช่วยให้การเขียนมีความยืดหยุ่น (+ 2 3) (- 3 2) (* 5 (+ 4 6)) (max 2 3 17) (+) ; evaluates to 0 (+ 5) ; evaluates to 5 (+ 5 4 3 2 1) ; (*) ; (* 5) ; (* 1 2 3 4 5) ;

Program and expression (cont) ฟังก์ชัน define เป็นการกำหนดชื่อตัวแปร f ให้เชื่อมโยงค่า 120 และชื่อ f สามารถถูกเรียกใช้ได้ในนิพจน์อื่นๆ ดังนี้ นิพจน์ในภาษาสคีมจำแนกได้เป็น 4 ประเภทคือ นิพจน์คณิตศาสตร์, นิพจน์ตรรกะ, นิพจน์แบบมี เงื่อนไข และนิพจน์แลมป์ดา (define f 120) f ; evaluates to 120 (+ f 5) ;

นิพจน์ในภาษาสคีม นิพจน์คณิตศาสตร์ (arithmetic expressions) เป็นนิพจน์ที่ให้ค่าเป็นตัวเลข นิพจน์ตรรกะ (Boolean expressions) เป็นนิพจน์ที่ให้ค่าเป็นจริง (#t) และเท็จ (#f) 7 ; has the value 7 (7 is called an atom) (+ f 3) ; has the value 123 (< 1 2) ; has the value #t (>= 3 4) ; (= 4 4) ; (not (> 5 6)) ; (and (< 3 4) (= 2 3)) ; (or (< 3 4) (= 2 3)) ;

นิพจน์ในภาษาสคีม (ต่อ) นิพจน์แบบมีเงื่อนไข (conditional expressions) เป็นนิพจน์เลือกทำงานโดยการเลือก ซึ่งจะขึ้นอยู่กับเงื่อนไขที่ระบุ if cond (if <test> <test-expression> <false-expression>) (cond (<tes-exp1> <expression1>) (<tes-exp2> <expression2>) … (else <else-exp>))

นิพจน์ในภาษาสคีม (ต่อ) (if (> 5 4) 42 99) ; has the value 42 (if (< 5 4) 42 99) ; (if (> 5 0) 33) ; (if (< 5 0) 33) ; ตัวอย่าง (cond ((> 3 2) “greater”) ((< 3 2) “less”)) ; (cond ((> 3 3) “greater”) ((< 3 3) “less”) (else “equal”)) ; (define n -5) (cond ((< n 0) “negative”) ((> n 0) “positive”) (else “zero”)) ;

นิพจน์ในภาษาสคีม (ต่อ) นิพจน์แลมป์ดา (lambda expressions) เป็นนิพจน์ที่ใช้นิยามฟังก์ชัน การตั้งชื่อให้กับฟังก์ชัน ทำได้ดังนี้ หรือใช้รูปย่อที่ไม่ต้องมีคำว่า lambda และการเรียกใช้ฟังก์ชันที่ได้รับการตั้งชื่อทำได้ดังนี้ (lambda (x) (+ x 1)) ((lambda (x) (+ x 1)) 3) ; has the value 4 (define add (lambda (x) (+ x 1))) (define (add x) (+ x 1)) (add 3) ; has the value 4

Built-in functions in scheme

Program and expression (cont) โปรแกรมและข้อมูลในภาษาสคีม และภาษาลิสป์ จะใช้โครงสร้างของลิสต์ ซึ่งเขียนอยู่ในรูปแบบ ตัวแปรภาษาสคีมจะประมวลผลโปรแกรมด้วยการตีค่า a ว่าคือฟังก์ชัน และ b, c, d คือ อาร์กิวเมนต์ของฟังก์ชัน เครื่องหมาย + คือ ฟังก์ชันการบวก อาร์กิวเมนต์คือ 2, 3, 4 จะใช้การเรียกตัวเองซ้ำ (a b c d) (+ 2 3 4)