Tổng quan về ngôn ngữ lập trình haskell

55 2.1K 15
Tổng quan về ngôn ngữ lập trình haskell

Đ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

Haskell là một ngôn ngữ lập trình hàm thuần túy và mang tính trì hoãn. Sở dĩ Haskell có tính chất trì hoãn bởi lẽ khi đi tìm câu trả lời cho 1 vấn đề, những tham số không cần thiết sẽ không được định trị. Đối nghịch với tính chất trì hoãn là tính chất tức thì – chiến lược định trị của đa phần các ngôn ngữ lập trình hiện nay (C, C++, Java, thậm chí là ML – một ngôn ngữ lập trình hàm). Một ngôn ngữ có tinh chất tức thì có nghĩa là mọi biểu thức đều được định trị cho dù kết quả đó có được sử dụng hay không. Haskell được gọi là ngôn ngữ lập trình hàm thuần túy bởi lẽ nó không cho phép các hiệu ứng phụ điều có thể làm thay đổi trạng thái của hệ thống. Việc một ngôn ngữ lập trình không có hiệu ứng phụ sẽ không quá kinh khủng; Haskell sử dụng một hệ thống đơn nguyên để tách biệt những tính toán không thuần túy ra khỏi phần còn lại của chương trình để thực hiện chúng một cách an toàn. Chúng ta sẽ nghiên cứu rõ hơn vấn đề này ở các phần tiếp theo về đơn nguyên và vàora trong ngôn ngữ thuần túy. Haskell được gọi là ngôn ngữ lập trình hàm bởi vì việc định trị một chương trình tương đương với định trị một hàm trên khía cạnh toán học thuần túy. Điều này khác biệt khi so sánh với các ngôn ngữ chuẩn (Ví dụ như C và Java) với cách định trị một chuỗi các statements.

Mục lục 1. Tổng quan về Haskell 3 1.1. Giới thiệu 3 1.2. Lịch sử của Haskell 3 Vì sao chúng ta cần đến Haskell? 5 Điểm yếu của Haskell? 5 1.3. Cấu trúc chương trình 5 2. Cấu trúc từ vựng và các khái niệm tổng quát trong Haskell 6 2.1. Quy ước ký hiệu 6 2.2. Cấu trúc từ vựng chương trình 7 2.3. Chú thích 8 2.4. Định danh và các toán tử 9 2.5. Chữ kiểu số 10 2.6. Kiểu ký tự và kiểu chuỗi 11 2.7. Khai báo và liên kết trong Haskell 12 2.8. Tổng quan về các kiểu và các lớp 13 2.8.1. Các loại 14 2.8.2. Cú pháp của kiểu 15 2.8.3. Cú pháp xác nhận lớp và ngữ cảnh 16 2.8.4. Ngữ nghĩa của kiểu và lớp 17 3. Giá trị, kiểu và các khái niệm 17 3.1. Kiểu đa hình 19 3.2. Các kiểu do người dùng tự định nghĩa 21 3.3. Kiểu đồng nghĩa 23 3.4. Các kiểu được xây dựng sẵn 24 3.4.1. Thể hiện danh sách và chuỗi số học 26 3.4.2. Chuỗi 26 4. Hàm trong Haskell 27 4.1 Trừu tượng hóa Lambda 28 4.2 Toán tử trung tố 28 4.2.1. Section 29 4.2.2. Khai báo cố định (fixity declarations) 29 4.3 Tính không chặt của hàm 30 4.4 Dữ liệu không giới hạn (Infinite data structure) 31 4.5 Hàm lỗi (error function) 32 5. Biểu thức theo trường hợp và khớp mẫu 33 5.1. Ngữ nghĩa của khớp mẫu 34 5.2. Ví dụ 35 5.3. Biểu thức trường hợp 36 5.4. Mẫu Lazy 37 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL 5.5. Phạm vi từ vựng và các dạng lồng nhau 40 5.6.Trình bày 41 6. Các lớp kiểu và viết chồng 42 7. Các thao tác vào ra cơ bản trong Haskell 49 8. Những ưu điểm của Haskell 50 8.1. Haskell là một ngôn ngữ lập trình hàm thuần túy 50 8.2. Haskell được đánh giá là 1 trong những ngôn ngữ có syntax đẹp nhất 50 8.3. Tính biểu cảm cao 51 8.4. Tính sử dụng lại 52 8.5. Định trị trì hoãn 52 8.6. Khả năng trừu tượng hóa cao 53 9. Kết luận 53 Haskell đang trở thành xu thế 53 TÀI LIỆU THAM KHẢO 55 Trang 2 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL 1. Tổng quan về Haskell 1.1. Giới thiệu Haskell là một ngôn ngữ lập trình hàm thuần túy và mang tính trì hoãn. Sở dĩ Haskell có tính chất trì hoãn bởi lẽ khi đi tìm câu trả lời cho 1 vấn đề, những tham số không cần thiết sẽ không được định trị. Đối nghịch với tính chất trì hoãn là tính chất tức thì – chiến lược định trị của đa phần các ngôn ngữ lập trình hiện nay (C, C++, Java, thậm chí là ML – một ngôn ngữ lập trình hàm). Một ngôn ngữ có tinh chất tức thì có nghĩa là mọi biểu thức đều được định trị cho dù kết quả đó có được sử dụng hay không. Haskell được gọi là ngôn ngữ lập trình hàm thuần túy bởi lẽ nó không cho phép các hiệu ứng phụ - điều có thể làm thay đổi trạng thái của hệ thống. Việc một ngôn ngữ lập trình không có hiệu ứng phụ sẽ không quá kinh khủng; Haskell sử dụng một hệ thống đơn nguyên để tách biệt những tính toán không thuần túy ra khỏi phần còn lại của chương trình để thực hiện chúng một cách an toàn. Chúng ta sẽ nghiên cứu rõ hơn vấn đề này ở các phần tiếp theo về đơn nguyên và vào/ra trong ngôn ngữ thuần túy. Haskell được gọi là ngôn ngữ lập trình hàm bởi vì việc định trị một chương trình tương đương với định trị một hàm trên khía cạnh toán học thuần túy. Điều này khác biệt khi so sánh với các ngôn ngữ chuẩn (Ví dụ như C và Java) với cách định trị một chuỗi các statements. 1.2. Lịch sử của Haskell Lịch sử của Haskell được trích từ báo cáo Haskell 98 của chính các tác giả như sau. Tháng 9 năm 1987, tại hội thảo về Các ngôn ngữ lập trình hàm và Kiến trúc máy tính (FPCA ‘87) tại Portland, Oregon để bàn luận về một vấn đề trong cộng đồng những người nghiên cứu về lập trình hàm: Có hơn một tá các ngôn ngữ lập trình hàm thuần túy và tất cả chúng đều giống nhau về khả năng biểu diễn và nền Trang 3 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL tảng ngữ nghĩa. Hội thảo đã đạt được sự nhất trí cao về việc thiếu một ngôn ngữ phổ dụng đã cản trở sử dụng rộng rãi lớp ngôn ngữ lập trình hàm này. Hội nghị đã quyết định thành lập một hội đồng để tạo ra ngôn ngữ đó, đồng thời nhanh chóng kết nối các ý tưởng mới, là nền tảng vững chắc để phát triển các ứng dụng thực tế, là phương tiện để khuyến khích mọi người sử dụng ngôn ngữ lập trình hàm. Tài liệu này mô tả những nỗ lực của hội đồng, đó là một ngôn ngữ lập trình hàm thuần túy gọi là Haskell. Tên gọi này được đặt theo tên của nhà logic học Haskell B.Curry – người có những công trình là nền tảng logic cho ngôn ngữ. Thành công chính của hội nghị là sáng tạo ra một ngôn ngữ thỏa mãn những ràng buộc về:  Thích hợp để giảng dạy, nghiên cứu, xây dựng các ứng dụng, bao gồm cả việc xây dựng các hệ thống lớn.  Có thể được mô tả hoàn toàn qua các công bố về cú pháp và ngữ nghĩa.  Miễn phí: mọi người đều được phép cài đặt, xây dựng các hệ thống trên nền tảng ngôn ngữ.  Được xây dựng trên những ý tưởng có sự nhất trí cao.  Làm giảm sự tràn lan của các ngôn ngữ lập trình hàm. Hội đồng dự kiến rằng Haskell sẽ trở thành nền tảng cho những nghiên cứu về thiết kế ngôn ngữ và hi vọng về sự mở rộng của thế giới ngôn ngữ cùng với các kết quả thử nghiệm. Quả thật, Haskell đã không ngừng mở rộng kể từ những công bố đầu tiên. Giữa năm 1997 đã có 4 phiên bản thiết kế của ngôn ngữ này (bản mới nhất vào lúc đó alf Haskell 1.4). Năm 1997, hội thảo Haskell tại Hà Lan, các nhà nghiên cứu đã quyết định về phiên bản ổn định của Haskell – Đó là Haskell 98. Haskell 98 được xem như là bản rút gọn của Haskell 1.4, được đơn giản hóa và loại bỏ một số lỗi có thể mắc phải. Haskell được dự kiến sẽ là ngôn ngữ mang tính ổn định theo nghĩa trong tương lai, bộ thực hiện cam kết sẽ hỗ trợ cho Haskell 98 chính xác như đã chỉ ra. Trang 4 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL Vì sao chúng ta cần đến Haskell? Có rất nhiều lý do để sử dụng Haskell. Haskell là một trong những ngôn ngữ cho phép tạo nên những đoạn mã lệnh trong thời gian ngắn nhất với ít lỗi nhất. Đồng thời, chương trình viết bằng Haskell rất dễ đọc với khả năng mở rộng cao. Ví dụ: factorial 1 = 1 factorial n = n * factorial (n-1) Ví dụ trên thực hiện việc tính giai thừa, với cách viết gần gũi với tư duy đệ quy. Tuy nhiên, có lẽ điều quan trọng nhất là những người sử dụng Haskell tạo nên một cộng đồng với nhiều chia sẻ rất hữu ích. Hiện tại, Haskell vẫn luôn thay đổi và những phản hồi của người sử dụng luôn được lưu ý để tạo nên thay đổi trong các phiên bản mới. Điểm yếu của Haskell? Dưới đây là hai trong số những vấn đề những người sử dụng Haskell than phiền:  Mã lệnh được sinh ra có vẻ chậm hơn các chương trình viết trên các ngôn ngữ khác như C.  Có vẻ khó debug hơn. Vấn đề thứ hai không phải là vấn đề quá lớn bởi lẽ Haskell giúp tạo ra những đoạn mã với ít lỗi. Vấn đề thứ nhất cũng khá phổ biến, tuy nhiên, thời gian tính toán là rẻ hơn so với thời gian lập trình nên nếu phải đợi thêm 1 chút khi thực thi để đổi đấy vài ngày debug thì cũng xứng đáng. Tuy vậy, vấn đề này xảy ra không phải với mọi ứng dụng. Haskell có một thư viện các giao diện cho phép ghép nối với những đoạn mã lệnh viết trên các ngôn ngữ khác khi cần tối ưu hóa thời gian thực thi. 1.3. Cấu trúc chương trình 1. Ở mức cao nhất của 1 chương trình Haskell là tập hợp các modules. Các modules này cung cấp phương thức điều khiển không gian tên phục vụ cho mục đích sử dụng lại trong các chương trình lớn. Trang 5 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL 2. Mức trên cùng của một module chứa một tập rất nhiều các kiểu khai báo. Các khai báo này định nghĩa những thành phần sẽ được dùng sau đó ví dụ như các giá trị nguyên thủy, kiểu dữ liệu, các lớp kiểu và các thông tin cố định. 3. Mức thấp hơn là các biểu thức – phần quan trọng nhất của lập trình Haskell. Các biểu thức chỉ ra một giá trị và có một kiểu tĩnh. 4. Ở mức dưới cùng của Haskell là cấu trúc từ vựng. Cấu trúc từ vựng biểu diễn cụ thể các chương trình Haskell dưới dạng text. Ta sẽ nghiên cứu Haskell từ dưới lên 2. Cấu trúc từ vựng và các khái niệm tổng quát trong Haskell 2.1. Quy ước ký hiệu Các quy ước ký hiệu để biểu diễn cú pháp của Haskell như sau: [pattern] tùy chọn (có hoặc không) {pattern} lặp hoặc không lặp (pattern) nhóm pat 1 |pat 2 lựa chọn pat <pat’> hiệu – những thành phần sinh ra bởi pat mà không được sinh ra bởi pat’ Cú pháp dạng tương tự BNF được sử dụng với các luật sản xuất có dạng sau: Trang 6 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL 2.2. Cấu trúc từ vựng chương trình Trang 7 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL Kỹ thuật phân tích từ vựng sử dụng luật “nhai cực đại”: tại mỗi điểm, vị từ dài nhất thỏa mãn luật sản xuất vị từ được đọc vào. Vì vậy, case là một từ được lưu lại trong khi cases thì không. Tương tự như vậy, = được lưu nhưng == và ~= thì không. Mọi kiểu của các khoảng trống đều là ranh giới cho các vị từ. Các ký tự không nằm trong kiểu ANY thì không phù hợp trong Haskell và sẽ gây ra lỗi. 2.3. Chú thích Một chú thích thông thường sẽ bắt đầu bằng hai hay nhiều các gạch nối (ví dụ: ) và mở rộng sang cả dòng mới. Chuỗi tuần tự các gạch nối này không được phép tạo thành một vị từ có nghĩa nào. Ví dụ: “ >” hay “| “ không phải là bắt đầu của một chú thích bởi vì chúng đều là các vị từ có nghĩa. Tuy vậy, “ foo” bắt đầu cho một chú thích. Các chú thích lồng nhau được bắt đầu bởi “{-” và kết thúc bởi “-}”. Không có vị từ có nghĩa nào bắt đầu bằng “{-” nên “{ ” sẽ bắt đầu cá chú thích lồng nhau mặc dù các gạch nối được đặt lien tiếp. Bản thân các chú thích sẽ không được phân tích về mặt từ vựng, kí hiệu “-}” sẽ kết thúc chú thích lồng nhau. Các chú thích lồng nhau này có thể có độ sâu tùy ý, mọi ký hiệu “{-“ sẽ bắt đầu cho một chú thích và sẽ được kết thúc bởi “-}”. Trong các chú thích lồng nhau thì mỗi ký hiệu “{-” sẽ tương ứng với một kí hiệu “-}”. Các chú thích lồng nhau này cũng được sử dụng cho trình biên dịch pragmas với những chỉ thị cho trình biên dịch làm việc. Trang 8 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL 2.4. Định danh và các toán tử Một định danh bao gồm một chữ cái và kế đó là không hoặc nhiều các chữ cái, số, dấu gạch dưới và dấu nháy đơn khác nữa. Các định danh được phân biệt về mặt từ vựng thành 2 miền không gian tên: loại bắt đầu bằng chữ cái thường (định danh kiểu biến) và loại bắt đầu bằng chữ cái viết hoa (định danh kiểu khởi tạo). Các định danh trong Haskell có phân biệt chữ hoa và chữ thường: các định danh name, naMe và Name là khác nhau (2 định danh đầu tiên là định danh kiểu biến, định danh cuối cùng là định danh kiểu khởi tạo). Dấu gạch dưới “_” được xem như 1 ký tự chữ thường và có thể xuất hiện ở mọi vị trí của chữ thường. Tuy vậy, một số trình biên dịch đưa ra những chú ý cho những định danh bắt đầu bởi “_”. Điều này cho phép các lập trình viên sử dụng “_foo” như một tham số mà họ sẽ không sử dụng. Các ký hiệu toán tử được tạo thành từ một hay nhiều các kí tự ký hiệu. Như đã chỉ ra ở trên, chúng được phân biệt về mặt từ vựng thành 2 miền không gian tên:  Một kí hiệu toán tử bắt đầu bởi 1 dấu “:” là một toán tử khởi tạo.  Một kí hiệu toán tử bắt đầu bởi bất kỳ ký hiệu khác là một định danh thông thường. Trang 9 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL Chú ý rằng bản thân dấu hai chấm được dành để khởi tạo danh sách trong Haskell, điều này cũng giống như khi làm việc với các phần khác trong cú pháp của danh sách, ví dụ như “[]” hay “[a, b]”. Trong phần tiếp theo của báo cáo, 6 loại tên khác nhau sẽ được sử dụng: varid variable conid constructors tyvar  varid type variables tycon  conid type constructor tycls  conid type classes modid  conid modules 2.5. Chữ kiểu số Có hai loại kiểu số khác nhau: đó là integer và float. Kiểu số nguyên thường được cho dưới dạng số thập phân, hệ cơ số 8 (với tiền tố 0o hoặc 0O), hoặc hệ cơ số 16 (với tiền tố 0x hay 0X). Kiểu số thực luôn có dạng số thập phân và luôn có các chữ số phía trước và sau dấu chấm (điều này giúp không gây nhầm lẫn khi sử dụng dấu chấm). Trang 10 [...]... LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL 4 Hàm trong Haskell Vì Haskell là ngôn ngữ lập trình hàm, hàm (fucntion) là có một trong những thành phần chính của Haskell Phần này sẽ trình bày những vấn đề liên quan đến hàm trong Haskell Trước hết xem ví dụ về định nghĩa hàm tính tổng của 2 số đầu vào: Dạng hàm như trên được gọi là curried function (được đặt theo tên của Haskell Curry), và... diễn một ngữ cảnh và ta viết cx => t để chỉ ra kiểu t nằm trong ngữ cảnh cx Ngữ cảnh cx chỉ được chứa các biến kiểu được tham chiếu trong t Để thuận tiện, ta viết cx => t ngay cả khi cx là rỗng Trang 16 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL 2.8.4 Ngữ nghĩa của kiểu và lớp Hệ thống kiểu của Haskell luôn gán một kiểu cho mỗi biểu thức trong chương trình Trong trường hợp tổng quát,... dụng với các cấu trúc dữ liệu không có điểm giới hạn (infinite) Trang 30 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL Một cách giải thích nữa về hàm không chặt trong Haskell đó là Haskell sử dụng khái niệm định nghĩa (definition) thay cho việc sử dụng các phép gán như trong các ngôn ngữ lập trình truyền thống Chẳng hạn như: v = 1/0 được hiểu là “định nghĩa v là 1/0”, chứ không phải “tính... TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL 2.7 Khai báo và liên kết trong Haskell Phần này sẽ trình bày cú pháp và ngữ nghĩa của các khai báo trong Haskell Các khai báo trong phần topdecls chỉ được phép ở mức trên cùng của một module Haskell, trong khi đó decls có thể được dùng ở cả phần đầu hoặc trong các vùng lồng nhau (trong các khối let hoặc where) Để dễ trình bày, ta chia phần... số trường hợp, lập trình viên sẽ không bị Trang 18 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL nhầm kiểu Ví dụ như chúng ta không thể cộng hai ký tự với nhau, vì thế biểu thức ‘a’+’b’ là sai về kiểu Ưu điểm chính của các ngôn ngữ kiểu tĩnh đều được biết đến: đó là tất cả các lỗi về kiểu được phát hiện trong quá trình biên dịch Không phải mọi lỗi đều do hệ thống kiểu Một biểu thức, ví... các ngôn ngữ lập trình hàm và là phương tiện để diễn giải ý nghĩa của tính đa hình Danh sách [1,2,3] trong Haskell thực chất là viết tắt của danh sách 1:( 2:( 3:([])) với [] là danh sách rỗng và : là toán tử trung tố làm nhiệm vụ cộng tham số đầu tiên vào phía trước tham số thứ hai (1 danh sách) Ta cũng có thể viết như sau: 1:2:3:[] Trang 19 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL. .. CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL 3.4.1 Thể hiện danh sách và chuỗi số học Tương tự như Lisp, danh sách có mặt khắp mọi nơi trong Haskell nên cách làm việc với nó cũng đa dạng Ngoài cách khởi tạo danh sách đã trình bày ở trên, Haskell cung cấp một phương thức gọi là thể hiện danh sách, ví dụ: Biểu diễn này có ý nghĩa: “danh sách tất cả các f x sao cho x được lấy từ xs” là điều kiện sinh Haskell. .. của các kiểu có kiểu thuộc loại k1 và trả về kiểu thuộc loại k2 Tham chiếu loại kiểm tra tính đúng đắn của biểu thức kiểu và giá trị kiểu Tuy nhiên, không giống như kiểu, loại hoàn toàn ngầm định và không thấy được trong ngôn ngữ Trang 14 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL 2.8.2 Cú pháp của kiểu Đây là cú pháp cho biểu thức kiểu của Haskell Các giá trị kiểu được xây dựng từ... Trang 20 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL Với các kiểu đa hình, ta có thể thấy một số kiểu là tổng quát hơn các kiểu khác theo nghĩa là tập giá trị mà chúng định nghĩa lớn hơn Ví dụ, kiểu [a] tổng quát hơn kiểu [Char] Nói cách khác, kiểu [Char] có thể được kế thừa từ kiểu [a] bằng cách thay thế a thích hợp Hệ thống kiểu của Haskell có hai tính chất quan trọng:  Đầu tiên, mọi... CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL Cả Bool và Color đều là các ví dụ về các kiểu liệt kê, chúng chứa một số lượng xác định các khởi tạo dữ liệu Đây là ví dụ về một kiểu chỉ có một khởi tạo dữ liệu: Do chỉ có một khởi tạo, kiểu giống như Point được gọi là kiểu bộ bởi vì bản chất của nó là tích Đề-các của các kiểu khác Ngược lại, các kiểu có nhiều khởi tạo như Bool và Color được gọi là kiểu tổng . LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL 1. Tổng quan về Haskell 1.1. Giới thiệu Haskell là một ngôn ngữ lập trình hàm thuần túy và mang tính trì hoãn. Sở dĩ Haskell có tính chất. sau: Trang 6 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL 2.2. Cấu trúc từ vựng chương trình Trang 7 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL Kỹ thuật phân tích. một tá các ngôn ngữ lập trình hàm thuần túy và tất cả chúng đều giống nhau về khả năng biểu diễn và nền Trang 3 TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH-NGÔN NGỮ HASKELL tảng ngữ nghĩa. Hội thảo

Ngày đăng: 11/11/2014, 15:30

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan