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

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

120 244 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

Thông tin cơ bản

Định dạng
Số trang 120
Dung lượng 2,34 MB

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