HASKELL LÀ GÌ

  -  

A chào bạn! Đây là Learn You a Haskell, phương pháp sành điệu nhất để học Haskell, ngữ điệu lập trình hàm hay duy nhất hiện nay. Bạn có thể đã nghe nói tới nó. Quyển giải đáp này dành cho những người trước đây đang lập trình, nhưng chưa thử thiết kế hàm.

Bạn đang xem: Haskell là gì

Cả cuốn sách gồm sẵn để các bạn đọc tự do thoải mái trên mạng, nhưng cũng có thể có sách in cùng tôi khuyến khích bạn oder được càng các càng xuất sắc tùy theo ví tiền của mình.

Mục lục

Chương 1: Giới thiệuChương 2: Xuất phátChương 3: Kiểu cùng lớp cất kiểuChương 4: Cú pháp dùng trong hàmChương 5: Đệ quyChương 6: Hàm cấp cho caoChương 7: ModuleChương 8: từ lập nên những kiểu với lớp riêngChương 9: Đầu vào và đầu raChương 10: Giải bài toán theo phong cách lập trình hàmChương 11: Functor, Functor áp dụng, cùng MonoidChương 12: một vài vấn đề về MonadChương 13: bổ sung về MonadChương 14: Khóa kéo

FAQ (Những câu hỏi thường gặp)

*

Tôi có thể đưa quyển lí giải này lên trang mạng của chính mình hay sửa đổi nó tuyệt làm bất cứ điều gì được không?

Dĩ nhiên là có, do nó được phạt thành theo giấy phép creative commons vì chưng vậy bạn có thể chia sẻ và thay đổi nội dung quyển này miễn là các bạn làm với thú vui trên môi với cho mục đích phi lợi nhuận.

Bạn có nhắc nhở tài liệu tìm hiểu thêm nào khác nhằm học Haskell không?

Có cả ông chồng tài liệu tốt vời, nhưng tôi mong chỉ ra cho chính mình thấy Real World Haskell tuyệt đối hoàn hảo ra sao. Nó thực sự khôn xiết tuyệt. Tôi cảm xúc rằng nó bổ sung cập nhật hợp lý mang đến quyển này. Quyển sách này tập trung chủ yếu đuối vào vấn đề dùng ví dụ đơn giản và dễ dàng để cho những người mới học tiếp thụ được Haskell, trong lúc Real World Haskell thực thụ chỉ cho ta thấy giải pháp làm đông đảo việc có lợi bằng ngôn từ lập trình này.

Một nguồn tài liệu Haskell hữu dụng khác là Try Haskell, cho phép thử Haskell ngay trong trình duyệt web và cung cấp những chỉ dẫn tương tác hết sức tuyệt.

Làm cầm cố nào tôi liên hệ được cùng với bạn?

Cách giỏi nhât là bắn cho tôi một thư điện tử đến bonus a còng learnyouahaskell chấm com. Dù vậy hiện nay tôi sẽ ngập đầu trong e-mail nên bao gồm gì bạn hãy thông cảm nếu như tôi không phúc âm kịp thời!

Sách chúng ta viết rất thú vị nhưng tôi vẫn mong muốn có bài xích tập nhằm làm!

Sắp có đấy! nhiều bạn đã hỏi tôi thêm bài bác tập vào, mửa tôi vẫn đưa một vài bài vào trong thời gian sớm nhất.

Bạn hãy tự reviews mình?

Tôi tên là Miran Lipovača, tôi sống sinh sống Ljubljana, Slovenia. Phần lớn thời gian tôi dành riêng cho những bài toán không tên, nhưng kế bên lúc kia ra thì tôi hay những lập trình, hoặc vẽ, đấm bốc hay đùa bass. Thậm chí còn tôi còn có một website bass tabs hơi sành điệu. Tôi còn sưu tập chim cú nhồi bông và thỉnh thoảng tôi thì thầm với chúng.

Chương 1: Giới thiệu

Về quyển chỉ dẫn này…

Chào mừng các bạn đến với Tự học mang Haskell (“Learn you a Haskell for Great Good”)! nếu khách hàng đang đọc loại chữ này thì có tác dụng là bạn có nhu cầu học Haskell. E hèm, bạn đã đến đúng địa điểm rồi, tuy vậy trước không còn ta hãy nói về cuốn sách lí giải này đã.

Tôi quyết định viết cuốn sách này do tôi muốn nắm vững kiến thức về Haskell và bởi tôi cho rằng tôi hoàn toàn có thể giúp số đông người không biết gì về Haskell học ngữ điệu này từ ánh mắt của cá thể tôi. Vẫn còn đó khá ít sách lý giải về Haskell trên mạng Internet. Lúc tôi ban đầu học Haskell, tôi không học xuất phát điểm từ một nguồn tư liệu duy nhất. Cách học của tôi là hiểu vài quyển lý giải khác nhau, cả những bài báo nữa, bởi mỗi tài liệu lý giải theo phương pháp riêng. Bằng câu hỏi đọc qua nhiều nguồn tài liệu, tôi đã rất có thể ghép mọi mảnh kiến thức lại và ngôn từ cuốn sách đột nhiên được hình thành. Do vậy đây là một cố gắng nỗ lực để bổ sung vào nguồn tài liệu học Haskell để bạn có thêm thời cơ tìm được nguồn tài liệu ưa thích.

Xem thêm: Red Alert 2 Màn Hình Đen Và Bị Treo Khi Chơi Ra2 Trên Windows 10 Mới 2021

*

Cuốn sách khuyên bảo này đa số dành cho những người đã có kinh nghiệm lập trình những ngôn ngữ mệnh lệnh (C, C++, Java, Python …) nhưng trước đây chưa dùng ngôn từ lập trình hàm (Haskell, ML, OCaml …). Dù vậy tôi vẫn dám cá với chúng ta rằng nếu khách hàng không chưa tồn tại kinh nghiệm xây dựng gì đáng kể, một tín đồ thông minh như bạn vẫn rất có thể theo kịp ngôn từ và học tập được Haskell.

Kênh tin #haskell bên trên mạng freenode là một trong những nơi xuất sắc để bạn đặt câu hỏi mỗi khi bị tắc trong lập trình. Mọi fan ở kia đều xuất sắc bụng, kiên nhẫn, với cảm thông đối với những fan mới học.

Trước khi thế được Haskell tôi đã chiến bại chừng gấp đôi vì có vẻ như nó quá kì quặc so với mình và tôi thiếu hiểu biết được. Tuy thế rồi một khi sẽ “vào guồng” cùng vượt qua rào cản ban đầu đó, hầu như chuyện hầu như thuận ai oán xuôi gió. Tôi đoán rằng điều tôi ý muốn nói đã là: Haskell thật thuyệt với nếu bạn suy xét lập trình thì các bạn thực sự bắt buộc học ngôn từ này trong cả khi lúc đầu nó dường như kì quặc. Học tập Haskell cũng khá giống với lần đầu tiên học lập trình sẵn — thật là vui! Nó bắt bạn phải suy nghĩ khác đi, điều mà sẽ dẫn ta cho mục kế tiếp …

Vậy Haskell là gì?

*
Haskell là một trong những ngôn ngữ lập trình sẵn hàm thuần túy. Trong số ngôn ngữ lập trình hình dáng mệnh lệnh, bạn giải quyết và xử lý vấn đề bằng phương pháp đưa ra cho máy vi tính một loạt những trách nhiệm để máy tính xách tay thực hiện tại chúng. Khi thực hiện, nó gồm thể chuyển đổi trạng thái. Chẳng hạn, chúng ta đặt đổi mới a bởi 5 rồi làm quá trình nào đó, rồi lại gán nó bởi một cực hiếm khác. Các bạn có quyền điều khiển và tinh chỉnh các kết cấu lặp để tiến hành một thao tác làm việc vài lần. Trong ngữ điệu lập trình hàm thuần túy, các bạn không sai bảo cho máy tính làm như vậy, mà là nói cho máy biết cần phải làm điều gì. Giai quá của một số là tích những số nguyên trường đoản cú 1 lên đến mức số đó; tổng của một danh sách các số thì bởi số thứ nhất cộng với tổng của toàn bộ các số còn lại, cùng cứ như vậy. Chúng ta thể hiện điều này dưới dạng các hàm. Chúng ta cũng cần yếu gán một biến bởi một quý giá nào đó nhằm rồi sau đây gán một quý giá khác. Nếu như bạn nói rằng a bằng 5, sau này bạn sẽ không thể nói nó bằng gì khác hơn vì các bạn đã nói nó bởi 5 rồi. Nếu như không, chẳng phải chúng ta đã nói dối ư? vày vậy trong số ngôn ngữ lập trình sẵn hàm, một hàm không có hiệu ứng phụ nào. Điều duy nhất cơ mà hàm thực hiện là tính một đồ vật gì dó rồi trả lại giá chỉ trị. Thoạt đầu, điều này có vẻ hạn chế nhưng thực ra nó có một trong những hệ quả khôn cùng hay: trường hợp một hàm được điện thoại tư vấn hai lần với những tham số như nhau thì nó sẽ đảm bảo an toàn trả lại thuộc kết quả. Điều này được gọi là việc minh bạch vào tham chiếu và không chỉ được cho phép các trình biên dịch phát âm được hành động của chương trình, mà còn khiến cho bạn dễ dãi suy luận (và thậm chỉ cả triệu chứng minh) ràng một hàm được viết đúng, để từ đó xây dựng phần lớn hàm phức hợp hơn bằng phương pháp gắn kết hồ hết hàm đơn giản dễ dàng lại cùng với nhau.

*
Haskell có tính lười biếng. Điều này tức là chỉ trừ khi chúng ta nói cụ thể ra, thì Haskell sẽ không thực thi những hàm và tính toán, cho đến khi nó đích thực bị bắt buộc trưng kết quả ra cho mình xem. Đặc tính này kết hợp giỏi với sự phân biệt về tham chiếu; nó giúp cho chính mình hình dung chương trình như là một trong những loạt hầu hết phép thay đổi dữ liệu. Nó chất nhận được tồn tại những điều thú vui như cấu tạo dữ liệu vô hạn. Mang sử chúng ta có một danh sách cố định và thắt chặt gồm những số xs = <1,2,3,4,5,6,7,8> cùng một hàm doubleMe có trọng trách nhân mỗi bộ phận lên gấp đôi rồi trả lại một danh sách mới. Trường hợp ta muốn nhân list này lên 8 lần, bằng cách dùng ngôn ngữ lập trình mệnh lệnh, và viết doubleMe(doubleMe(doubleMe(xs))), thì có thể nó đã coi ngó qua list một lần để tạo thành một bạn dạng sao rồi trả lại danh sách. Tiếp nối nó sẽ phê duyệt qua danh sách 2 lần tiếp nữa và trả lại kết quả. Trong một ngôn ngữ lập trình lười biếng, vấn đề gọi doubleMe đối với một danh sách mà ko yêu cầu cần trưng ra kết quả thì lịch trình sẽ thứ hạng như đáp lời bạn “Rồi rồi, tôi sẽ làm sau!”. Tuy nhiên một khi bạn muốn xem kết quả, thì doubleMe thứ nhất sẽ nói cho chiếc thứ hai biết rằng nó muốn kết quả, tức thì bây giờ! chiếc thứ hai sẽ nói cho cái thứ tía và loại thứ tía miễn cưỡng trả lại số gấp hai của 1, có nghĩa là 2. Loại thứ hai nhận lấy cực hiếm này và đưa số 4 cho mẫu thứ nhất. Cái thứ nhất nhận lại và báo với chúng ta rằng thành phần đầu tiên nên tính là 8. Bởi thế chỉ có một lần chăm chú qua danh sách và chỉ khi chúng ta thực sự thấy cần. Bằng cách này khi bạn có nhu cầu một điều gì đấy từ ngữ điệu lập trình lười biếng, chúng ta có thể lấy số liệu nguồn vào và biến hóa theo giải pháp hiệu qủa rồi lắp lại thì sẽ được công dụng mong mong ở đầu ra.

*
Haskell tất cả kiểu tĩnh. Khi chúng ta biên dịch chương trình vừa viết, thì trình biên dịch sẽ hiểu được đoạn mã nào là 1 trong những số, đoạn mã nào là 1 trong những chuỗi kí tự, vân vân. Điều này đồng nghĩa với việc rất nhiều lỗi ẩn chứa được vạc hiện cơ hội biên dịch. Giả dụ bạn nỗ lực cộng một số và một chuỗi kí từ lại cùng với nhau, trình biên dịch sẽ gào lên. Haskell sử dụng một khối hệ thống kiểu cực tốt và có khả năng suy luận kiểu. Tức là bạn không nhất thiết phải gắn rõ ràng từng đoạn mã lệnh cùng với một hình trạng riêng, vì khối hệ thống kiểu rất có thể hình dung ra điều này một phương pháp rất thông minh. Nếu như khách hàng nói a = 5 + 4, bạn sẽ không cần phải bảo Haskell hiểu được a là 1 con số; nó hoàn toàn có thể tự tưởng tượng ra được. Suy luận hình dạng cũng giúp cho mã lệnh các bạn viết được tổng quát hơn. Nếu như như một hàm bạn viết ra thừa nhận hai tham số và cộng chúng lại với nhau nhưng mà không nói rõ kiểu của những tham số này thì hàm và tính được với nhị tham số bất kỳ nào có biểu thị giống vẻ bên ngoài số.

Haskell tinh tế và gọn. Vì dùng những khái niệm cấp cho cao, rất nhiều chương trình Haskell thường ngắn thêm các chương trình tương tự viết theo ngôn từ mệnh lệnh. Và gần như chương trình ngắn thì dễ duy trì hơn cùng ít lỗi hơn so với hầu hết chương trình dài.

Haskell được tạo ra bởi những người dân rất thông minh (có bởi tiến sĩ). Việc cấu hình thiết lập Haskell bước đầu vào năm 1987 lúc 1 hội đồng rất nhiều nhà nghiên cứu hợp tác để thi công nên một ngôn ngữ thật ấn tượng. Năm 2003, bạn dạng Haskell Report được xuất bản, định hình phiên phiên bản ổn định của ngữ điệu này.

Bạn phải gì để hợp tác vào thực hành?

Một trình soạn tệp tin chữ cùng trình biên dịch Haskell. Chúng ta cũng có thể đã tất cả một trình soạn tệp tin chữ yêu mếm vì vậy ta sẽ không còn mất thời gian bàn về nó nữa. Để thực hành nội dung vào cuốn sách này ta sẽ sử dụng GHC, trình biên dịch Haskell phổ cập nhất. Cách rất tốt để ban đầu là thiết lập về Haskell Platform, nói nôm na đó là Haskell với các thư viện phụ thêm.

Xem thêm: Mã Nhận Quà Fifa Online 3 - 404 Not Found&Ndash Wilders

GHC có thể nhận một đoạn chương trình Haskell (thường bao gồm phần không ngừng mở rộng .hs) để biên dịch, mặc dù thế nó cũng có một chính sách tương tác vốn có thể chấp nhận được bạn hệ trọng trực tiếp với những đoạn chương trình. Tương tác. Chúng ta có thể gọi các hàm từ bỏ đoạn chương trình được sở hữu và tác dụng sẽ được hiển thị tức thì. Để phục vụ mục đích học tập thì biện pháp này dễ dàng và nhanh hơn những so với yêu cầu biên dịch mỗi khi chúng ta sửa thay đổi rồi chạy lại từ vết nhắc lệnh. Chính sách văn lệnh được khởi động bằng cách gõ vào ghci từ lốt nhắc hệ thống. Nếu như bạn đã định nghĩa một vài hàm trong một file mang tên ví dụ như thể myfunctions.hs, thì bạn sẽ tải các hàm này bằng cách gõ vào :l myfunctions; chấm dứt rồi bạn có thể thử nghiệm chúng, miễn sao myfunctions.hs được đặt tại cùng thư mục nơi mà ghci được khởi động. Nếu khách hàng sửa thay đổi file chương trình .hs, thì chỉ việc gõ lại :l myfunctions hoặc gõ :r; phương pháp làm này tương tự vì nó mua lại (reload) file chương trình hiện thời. Quy trình chuyển động quen thuộc với tôi lúc thử nghiệm là tư tưởng một hàm nào đó trong một file .hs, cài nó rồi thử chạy ngán chê, tiếp nối sửa đổi file .hs file, tải lại và cứ như vậy. Đây cũng là biện pháp mà bọn họ sẽ làm.