1. Trang chủ
  2. » Thể loại khác

TÀI LIỆU ĐẠI HỌC - godautre PPLT-Chuong 2

120 243 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Cấu trúc

  • Chương 2

  • 1. Lập trình hàm

  • Slide 3

  • 3. Nhìn qua về lập trình cho hàm trong Gopher

  • 1. Thông qua biểu thức

  • 2. Lập các trường hợp

  • 3. Đối sánh mẫu

  • 5. Sử dụng hàm thư viện

  • 4. Sử dụng trình thông dịch Gopher

  • Ví dụ về file nguồn facts.gs

  • Một số lệnh thông dịch

  • Slide 12

  • Ví dụ về thực hiện tính biểu thức và hàm thư viện trên dòng lệnh

  • Slide 14

  • Ví dụ về việc nộp và thực hiện các hàm trong chương trình

  • Slide 16

  • Slide 17

  • Slide 18

  • Slide 19

  • Slide 20

  • Slide 21

  • Slide 22

  • Slide 23

  • Slide 24

  • Slide 25

  • 5.2. Lập trình với list

  • Slide 27

  • Slide 28

  • Slide 29

  • 5.3. Các toán tử infix

  • 5.4. Các kiểu đệ quy

  • Slide 32

  • Slide 33

  • Slide 34

  • Slide 35

  • Slide 36

  • Slide 37

  • Slide 38

  • Slide 39

  • Slide 40

  • Slide 41

  • 5.5. Các toán tử list khác

  • Slide 43

  • Slide 44

  • 5.6. Xây dựng tập số hữu tỷ

  • Slide 46

  • Slide 47

  • Slide 48

  • Slide 49

  • 6. Các hàm bậc cao

  • Slide 51

  • Slide 52

  • Slide 53

  • Slide 54

  • Slide 55

  • Slide 56

  • Slide 57

  • Slide 58

  • Slide 59

  • Slide 60

  • Slide 61

  • Slide 62

  • Slide 63

  • Slide 64

  • Slide 65

  • Slide 66

  • Slide 67

  • Slide 68

  • 7. Các vấn đề khác về danh sách

  • Slide 70

  • Slide 71

  • Slide 72

  • Slide 73

  • Slide 74

  • Slide 75

  • Slide 76

  • Slide 77

  • Slide 78

  • Slide 79

  • Slide 80

  • Slide 81

  • Slide 82

  • 9. Lập trình hàm trong C# (giới thiệu)

  • Slide 84

  • Slide 85

  • Slide 86

  • Slide 87

  • Slide 88

  • Slide 89

  • Slide 90

  • Slide 91

  • Slide 92

  • Slide 93

  • Slide 94

  • Slide 95

  • Slide 96

  • Slide 97

  • Slide 98

  • Slide 99

  • Slide 100

  • Slide 101

  • Slide 102

  • Slide 103

  • Slide 104

  • Slide 105

  • Slide 106

  • Slide 107

  • Slide 108

  • Slide 109

  • Slide 110

  • Lưu ý

  • 10. Lập trình hàm với F#

  • Slide 113

  • Slide 114

  • Slide 115

  • Slide 116

  • Slide 117

  • Slide 118

  • Slide 119

  • Slide 120

Nội dung

TÀI LIỆU ĐẠI HỌC - godautre PPLT-Chuong 2 tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập lớn về tất cả...

Chương Phương pháp lập trình hàm ứng dụng NET Lập trình hàm • Mơ hình tính toán dựa khái niệm toán học hàm • Mỗi hàm khơng đối số nhiều đối số Kết hàm giá trị xác định dự báo • Ngơn ngữ lập trình hàm: FP, Haskell, Gopher… Định nghĩa hàm • • Số tự nhiên: Tốn học: 1,2… Khoa học tính tốn: 0,1,2… Ví dụ hàm đơn giản: Hàm tính giai thừa: fact(n) = x x 3… x n với fact(0) =1 • Có thể viết theo dạng: • Dễ thấy rằng, định nghĩa sau tương đương với định nghĩa trước (có thể chứng minh quy nạp) Nhìn qua lập trình cho hàm Gopher • Hàm fact(n) với định nghĩa: Có thể lập trình với cách cách khác Gopher Thơng qua biểu thức -Dòng 1: Xác định kiểu cho hàm fact1 theo cú pháp object :: type fact1 định nghĩa hàm (ký hiệu ->) với tham số có kiểu Int (thứ nhất) kiểu trả lại hàm Int (thứ hai) (Gopher không định nghĩa tập tự nhiên nên tạm sử dụng kiểu Int) -Dòng 2: Khai báo nội dung hàm fact1, có dạng: fname params = body Trong đó: fname: Tên hàm params: tham số hàm (có thể khơng có) body : biểu thức xác định giá trị hàm ví dụ biểu thức if – then - else Lập trường hợp • Lập trường hợp cho việc kiểm tra phương trình điều kiện Nếu trường hợp thực việc lấy giá trị theo trường hợp • Gopher duyệt từ xuống trường hợp để kiểm tra điều kiện • Có thể thay otherwise điều kiện n>=1 để khẳng định xét phạm vi số tự nhiên Đối sánh mẫu • Được gọi cách đối sánh mẫu (pattern matching) Gopher đối sánh giá trị tham số với mẫu giá trị sau fact3 để xác định giá trị cần tìm • Gopher duyệt từ xuống để tìm mẫu • Xác định xét phạm vi số tự nhiên Sử dụng hàm thư viện - n gọi biểu thức danh sách (list) Nó phát sinh số nguyên từ đến n - Hàm product hàm nhân Nó thực việc nhân tất phần tử danh sách [1 n] Đánh giá: Nhiều người cho fact5 fact6 tốt cách xây dựng khác Sử dụng trình thơng dịch Gopher Khởi động Gopher Gopher File nguồn: - Là file script có phần mở rộng hs, has, gs, gof chứa định nghĩa hàm, toán tử, kiểu… - file với phần mở rộng prelude (hoặc pre) file thư viện chứa hàm, toán tử, kiểu định nghĩa sẵn Chú thích file nguồn: {- -} - - Ví dụ file nguồn facts.gs Thí dụ cho thấy vòng lặp “foreach (Person p in person)” hàm Print hồn tồn khơng thi hành liên tục dòng lệnh ToUpper() với từ khố yield Lệnh ToUpper() person gọi thật yêu cầu Trong trường hợp dòng lệnh “foreach (Person pp in printPerson)” đoạn mã kiểm tra kết Lazy valuation Hàm bậc cao (Higher Order Function): • Tuy kỹ thuật lập trình FP xuất từ C# 2.0 • Higher Order Function xem hàm dạng liệu parameter hàm hàm • “Filter”, “Map” “Reduce” xem ba hàm bậc cao hữu ích cho phép tốn dãy (List, Aray, IEnumerable) Tuy nhiên C# 2.0 hỗ trợ cho kiểu liệu List Array “Filter”: Các method FindAll hay RemoveAll xem Filter parameter hàm hàm điều kiện mà phần tử dãy thỏa điều kiện hàm phần tử chọn (Find) hay bị xóa (Remove) khỏi danh sách Thí dụ tìm kiếm danh sách người tên “An”: people.FindAll(delegate(Person p) { return p.Name.Equals(“An”); }) Để tìm tên bất kỳ, cần phải tạo hàm public static Predicate SearchName(string name) { return delegate(Person p) { return p.Name.Equals(name); }; } Và đó: var AnList = people.FindAll(SearchName(“An”)); var HuyList = people.FindAll(SearchName(“Huy”)); Trong C# 3.0, viết: var AnList = people.FindAll(p => p.Name.Equals(“An”)); Nó tương tự sử dụng “Where”: var person = people.Where(p=>p.Name.Equals(“An”)); “Map”: Dùng để tạo dãy từ dãy ban đầu theo phép toán tương ứng Hàm ConvertAll() “Map” Parameter hàm hàm ảnh hưởng lên phần tử dãy Ví dụ: Câu lệnh tạo danh sách với mức lương nhân với hệ số “0.7”: var allowanceSalary = people.ConvertAll(delegate(Person p) { return p.Salary *= 0.7; }); Trong C# 3.0: var allowanceSalary = people.ConvertAll(p => p.Salary * 0.7); tương đương với: var allowanceSalary = people.Select(p => p.Salary * 0.7); Aggregate: Còn hiểu “Fold” lập trình FP Đây khả tính tốn giá trị dãy cách lướt qua tất phần tử dãy Tính tổng tiền lương danh sách: int total = people.Aggregate(0, delegate(int currentSum, Person p) { return currentSum + p.Salary; }); Trong C# 3.0: var total = people.Select(p => p.Salary).Aggregate(0, (x, y) => x + y); Lưu ý NET Framework 3.5 cung cấp số hàm tính tốn cho dãy Sum, Average, Count, Min, Max Do thấy Filter hay Map C# 2.0 khơng thích hợp cho C# 3.0 Lambda Expression hồn tồn thay LINQ ngày phổ biến Thí dụ tính tổng số lương người có tuổi lớn 29: var total = people.Where(p => p.Age>29).Select(p => p.Salary).Sum(); hay var total = (from p in people where (p.Age > 29) select p.Salary).Sum(); 10 Lập trình hàm với F# 10.1 Giới thiệu: • Visual Studio 2010 - Visual F# • F# ngơn ngữ lập trình hỗ trợ lập trình hàm hướng lập trình hướng đối tượng (object-oriented ) mệnh lệnh (imperative) • Sản phẩm Visual F# ứng dụng F# mở rộng cho ứng dụng NET Framework khác cách sử dụng code F# • F# Redistributable Package • Hưóng dẫn lập chương trình F# với Visual Studio http://msdn.microsoft.com/en- us/library/dd233160%28VS.100%29.aspx • Học lập trình F# http://en.csharp-online.net/FSharp_Functional_Programming.htm 10.2 Cơ lập trình hàm F#: Định danh (let) let x = 42 let raisePowerTwo x = x ** 2.0 Từ khoá abstract lsl and lsr as lxor assert match member asr mod begin module class mutable namespace default new delegate null of done open downcast or downto override else rec end sig exception static false struct finally then for to fun true function try if type in val inherit when inline upcast interface while land with lor async method atomic mixin break namespace checked object component process const property constraint protected constructor public continue pure decimal readonly eager return enum sealed event switch external virtual fixed void functor volatile include where Trạch trùng với từ khoá: let ``class`` = "style" Literals Example F# Type NET Type Description "Hello\t ", "World\n" string System.String A string in which a backslash (\) is an escape character @"c:\dir\fs", @"""" string System.String A verbatim string where a backslash (\) is a regular character "bytesbytesbytes"B byte array System.Byte[] A string that will be stored as a byte array 'c' char System.Char A character true, false bool System.Boolean A Boolean 0x22 int/int32 System.Int32 An integer as a hexadecimal 0o42 int/int32 System.Int32 An integer as an octal 0b10010 int/ int32 System.Int32 An integer as a binary 34y sbyte System.SByte A signed byte 34uy byte System.Byte An unsigned byte 34s int16 System.Int16 A 16-bit integer 34us uint16 System.UInt16 An unsigned 16-bit integer 34l int/int32 System.Int32 A 32-bit integer 34ul uint32 System.UInt32 An unsigned 32-bit integer 34n nativeint System.IntPtr A native-sized integer 34un unativeint System.UIntPtr An unsigned native-sized integer 34L int64 System.Int64 A 32-bit integer 34UL uint64 System.Int64 An unsigned 32-bit integer 3.0F, 3.0f float32 System.Single A 32-bit IEEE floating-point number 3.0 float System.Double A 64-bit IEEE floating-point number 3474262622571I bigint Microsoft.FSharp.Math.BigInt An arbitrary large integer 474262612536171N bignum Microsoft.FSharp.Math.BigNum An arbitrary large number Ví dụ: Kết quả: Values and Functions Kết quả: Scope Recursion Anonymous Functions ... head:tail Ví dụ: [] 2: [] 2: (3: []) 5: (3: (2 : []) viết : 5:3 :2: [] [5,3 ,2] • Có hàm thực kiểu danh sách head tail: Ví dụ: head [5,3 ,2] cho lại tail [5,3 ,2] cho danh sách [3 ,2] • Là kiểu định... :: [a] -> Int - t1, t2,…, tn kiểu (có thể khác nhau) - Khơng giống list, tuple có phần tử không thiết kiểu số phần tử tuple cố định Nó tương tự kiểu Record Turbo – Pascal - Ví dụ tuple: 5 .2 Lập... trình với list • Tổng list (sumlist) - Cho danh sách gồm phần tử nguyên v1, v2, v3, v4, … ,vn - Tính tổng S = v1+ v2 + v3+ … + - Xây dựng hàm sumlist sau: - Có thể thay dòng thứ bởi: • Hàm tính

Ngày đăng: 21/12/2017, 12:12

TỪ KHÓA LIÊN QUAN

w