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

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

Functional programming part II. ชนิดข้อมูลลิสต์ และการประมวลผลลิสต์  แนวคิดเกี่ยวกับตัวแปรจะต่างจากแนวคิดเดิม  Imperative: เชื่อมโยงชื่อตัวแปรกับตำแหน่งที่ใช้เก็บค่าในหน่วยความจำ.

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


งานนำเสนอเรื่อง: "Functional programming part II. ชนิดข้อมูลลิสต์ และการประมวลผลลิสต์  แนวคิดเกี่ยวกับตัวแปรจะต่างจากแนวคิดเดิม  Imperative: เชื่อมโยงชื่อตัวแปรกับตำแหน่งที่ใช้เก็บค่าในหน่วยความจำ."— ใบสำเนางานนำเสนอ:

1 Functional programming part II

2 ชนิดข้อมูลลิสต์ และการประมวลผลลิสต์  แนวคิดเกี่ยวกับตัวแปรจะต่างจากแนวคิดเดิม  Imperative: เชื่อมโยงชื่อตัวแปรกับตำแหน่งที่ใช้เก็บค่าในหน่วยความจำ ผู้ใช้ สามารถเปลี่ยนแปลงค่าในหน่วยความจำไปอย่างไรก็ได้ผ่านการสั่งกำหนดค่า ตัวแปร  Functional: จะเชื่อมโยงค่ากับตัวแปร โดยไม่มีการเกี่ยวข้องลงไปถึงตำแหน่ง ในหน่วยความจำ เช่น (define x 5) ; 5 เป็นชนิดข้อมูลพิ้นฐาน (primitive data types)

3 ชนิดข้อมูลลิสต์ และการประมวลผลลิสต์  ชนิดข้อมูลพื้นฐาน ( ภาษาสคีม )  อักขระ (characters)  ข้อความ (strings)  ค่าตรรกะ (Booleans)  เลขจำนวนเต็ม (integers)  จำนวนตรรกยะ (rational numbers)  เลขจำนวนจริง (real numbers)  เลขจำนวนเชิงซ้อน (complex number)

4 ชนิดข้อมูลลิสต์ และการประมวลผลลิสต์ ( ต่อ )  ชนิดข้อมูลคอมโพสิต (composite data type) มีเพียงประเภทเดียว คือ ลิสต์ (lists)  Lists  มีสมาชิกได้หลายจำนวน  สมาชิกที่ปรากฏตัวแรกในลิสต์ เรียกว่า หัว (head)  สมาชิกส่วนที่เหลือเรียกว่า หาง (tail)  เช่น ‘(a b c) เป็นลิสต์ที่มีส่วนหัวคือ a และส่วนหางคือ ลิสต์ที่เหลือ ซึ่งได้แก่ ‘(b c)  ลิสต์คือกลุ่มข้อมูลที่มีการเรียงลำดับตามตำแหน่งที่ปรากฏภายใน ลิสต์ จำนวนสมาชิกภายในลิสต์มีได้ตั้งแต่ศูนย์ตัวขึ้นไป ลิสต์ที่ ไม่มีสมาชิกเลย เรียกว่า ลิสต์ว่าง (empty list, or null list) เขียน แทนด้วย () หรือ (nil)  สมาชิกที่ปรากฏภายในลิสต์ สามารถเป็นค่าประเภทใดก็ได้ เช่น ค่าตรรกะ, ตัวเลข, ตัวแปร, สัญลักษณ์, อักขระ, ข้อความ, ลิสต์, ฟังก์ชัน …

5 ลิสต์  ตัวอย่างแรกภายในลิสต์ประกอบด้วย symbol 4 ตัว ส่วนตัวอย่างที่สอง ภายใน ประกอบด้วย symbol 2 ตัว และลิสต์ 2 ตัว ตัวอย่าง (I like programming) (I (like) programs (with no objects))

6 ลิสต์ ( ต่อ )  ฟังก์ชันพื้นฐานที่ใช้ในการสร้างลิสต์ได้แก่ ฟังก์ชัน list และ quote ตัวอย่างเช่น  ฟังก์ชันที่ประมวลผลด้วยลิสต์ประกอบด้วย (list 1 2 (+ 1 2)); has value (1 2 3) (quote (1 2 (+ 1 2))); has value (1 2 3) ‘(1 2 (+ 1 2)); has value (1 2 3) (null? X) (cons a x) (append x y) (car x) (cdr x) (length x) (reverse x)

7 นิพจน์ผลลัพธ์ (define mylist (list )) Mylist (length mylist) (reverse mylist) (cons a mylist) (append ‘(a b) mylist) (null? mylist) (car mylist) (cdr mylist) (car (cdr mylist)) (cdr (cdr mylist)) (equal? ‘(1 2) ‘(1 2)) (equal? 5 5) (equal? ‘(1 2) ‘(2 1)) (equal? 5 ‘(5)) (equal? () ())

8 ฟังก์ชันเวียนบังเกิด (Recursive function)  การสั่งทำงานซ้ำในการทำโปรแกรมเชิงหน้าที่จะใช้วิธี ให้ฟังก์ชันเรียกตัวเอง ซ้ำ หรือเรียกว่า ฟังก์ชันเวียนเกิด  ลักษณะการเรียกตัวเองซ้ำ เมื่อมีการคำนวณค่า 4! เขียนแสดงขั้นตอนการ ทำงานได้ดังนี้ (define (factorial n)) (if (< n 1) 1 (* n (factorial (n - 1))))) (factorial 4)

9 Recursive Func. (cont)  การสร้างฟังก์ชันเวียนเกิด จะเริ่มต้นด้วยการกำหนดกรณีพื้นฐาน (base case) ส่วนกรณีอื่นๆ ที่ไม่ใช่กรณีพื้นฐาน จะคำนวณค่าด้วยการเรียกตัวเองซ้ำ (recursive step)  Most important, การเรียกตัวเองซ้ำนั้น จะต้องมีที่สิ้นสุด (sum ‘( )) (define (sum alist) (if (null? alist) 0 (+ (car alist) (sum (cdr alist)))))

10 Recursive Func. (cont)  Recursive function เป็นวิธีสั่งทำงานที่มีรูปแบบสั้น แต่การใช้เนื้อ ที่ในหน่วยความจำจะสิ้นเปลืองมาก  เพราะต้องใช้เนื้อที่สแตกในแต่ละครั้งของการเรียกฟังก์ชัน  Tail recursion ปรับให้ขั้นตอน recursion เกิดขึ้นท้ายสุด จะทำให้ ใช้เนื้อที่สแตกน้อยลง  ตัวอย่าง ให้นิยามฟังก์ชัน number-interval ที่ทำหน้าที่สร้าง ข้อมูลเป็นช่วง เช่นถ้าผู้ใช้ระบุ (number-interval 1 5 ) ผลลัพธ์ที่ได้จะเป็น ( )

11 Recursive and tail-recursive functions Recursive function (define (number-interval f t) (if (> f t) ‘() (cons f (number-interval (+ f 1) t)) )) Tail-recursive function (define (number-interval-tail f t) (reverse (number-interval-help f t ‘()))) (define (number-interval-help f t result) (if (> f t) result (number-interval-help (+ f 1) t (cons f result)) ))

12 ฟังก์ชันอันดับสูง (Higher-order function)  ความสามารถที่สำคัญที่สุดของ Functional programming คือ การนิยาม และ การใช้ฟังก์ชันอันดับสูง  ฟังก์ชันนั้นจะถูกจัดว่าเป็นฟังก์ชันอันดับสูง ถ้าฟังก์ชันนั้น สามารถรับฟังก์ชัน อื่นเป็นพารามิเตอร์ และสามารถส่งกลับค่าเป็นฟังก์ชัน  ฟังก์ชัน flip รับพารามิเตอร์ f ซึ่งเป็นฟังก์ชันมีสองพารามิเตอร์คือ x และ y  จากนั้น flip ทำคำสั่ง (f y x) ซึ่งเป็นการส่งค่ากลับเป็นฟังก์ชัน f ที่มีพารามิเตอร์ ตัวแรกเป็น y และตัวที่สองเป็น x  ดังนั้น flip จึงเป็นฟังก์ชันอันดับสูงที่ทำหน้าที่รับฟังก์ชันสองพารามิเตอร์ แล้ว ส่งฟังก์ชันกลับโดยสลับลำดับของพารามิเตอร์ รูปแบบเต็มของฟังก์ชัน (define flip (lambda (f) (lambda (x y) (f y x)))) รูปแบบย่อของฟังก์ชัน (define (flip f) (lambda (x y) (f y x))))

13 Higher-order function (cont)  ภาษาสคีมมักจะมีการใช้ฟังก์ชัน map เป็นฟังก์ชันอันดับสูง รับพารามิเตอร์เป็น ฟังก์ชัน และใช้ฟังก์ชันนั้นบนข้อมูลทุกตัวในลิสต์  ฟังก์ชัน map สามารถนิยามได้ดังนี้ (map square’( )); (map string? List 1 ‘en “en” 2 ‘to “to”)); (map (lambda (x) (* 2 x)) (list )); (define (map f x) (cond ((null? x) ‘()) (else (cons (f (car x)) (map f (cdr x))))))

14 Higher-order function (cont)  (filter even? ‘( )) (define (filter predicate alist) (reverse (filter-help predicate alist ‘() ))) (define (filter-help predicate alist result) (cond ((null? alist) result) ((predicate (car alist)) (filter-help predicate (cdr alist) (cons (car alist) result))) (else (filter-help predicate (cdr alist) result)) ))


ดาวน์โหลด ppt Functional programming part II. ชนิดข้อมูลลิสต์ และการประมวลผลลิสต์  แนวคิดเกี่ยวกับตัวแปรจะต่างจากแนวคิดเดิม  Imperative: เชื่อมโยงชื่อตัวแปรกับตำแหน่งที่ใช้เก็บค่าในหน่วยความจำ.

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


Ads by Google