Các mẫu thiết kế chức năng [đã đóng]


106

Có rất nhiều thành ngữ chức năng: đơn nguyên, ứng dụng, mũi tên, v.v. Chúng được ghi lại trong các bài báo khác nhau nhưng tiếc là tôi không biết bất kỳ cuốn sách hoặc bài báo nào mà chúng được tóm tắt ở một nơi (có Typeclassopedia nhưng nó có rất nhiều của các khu vực không được che phủ tốt). Bất cứ ai có thể giới thiệu một bài báo / cuốn sách bao gồm chúng tốt ở một nơi và có thể tiếp cận được với một lập trình viên có kỹ năng trung cấp về FP?


Nó không trực tiếp trả lời câu hỏi của bạn nhưng câu hỏi khác này có một số thông tin thú vị (và ít nhất là một hoặc hai liên kết): stackoverflow.com/questions/327955/…
đăng lại vào

15
Bạn có thể mở rộng về những lĩnh vực nào mà bạn cảm thấy Typeclassopedia không bao quát tốt?
dave4420,

2
@ dave4420 Nếu tôi đọc typeclassopedia từ đầu đến cuối, càng đọc, tôi càng hiểu ít hơn. Phần đầu thực sự rất hay nhưng phần sau thì tôi khó đọc.
Konstantin Solomatov

3
@KonstantinSolomatov có thể là bạn sẽ cần nghiên cứu những phần bạn không hiểu, xem các bài đăng trên blog và chăm chỉ xem mã. tất cả những "mẫu thiết kế" này trong bách khoa toàn thư thực sự là những cái trừu tượng, và thường là những cái sâu sắc, đôi khi phải mất một thời gian mới chìm vào.
jberryman

1
@DanBurton không chắc bạn có đọc nhầm nhận xét của tôi hay không, nhưng tôi đã phân loại tất cả những điều đó là những nội dung trừu tượng sâu sắc, mặc dù bạn có thể dễ dàng quên điều đó khi bạn có câu "Ah ha!" chốc lát.
jberryman

Câu trả lời:


35

Đề xuất của tôi là, nếu bạn muốn học Scala, hãy đọc cuốn sách của Paul Chiusano và Runar Bjarnason:

http://manning.com/bjarnason/

Phần II: Thiết kế chức năng và các thư viện tổ hợp

  1. Tạo ngôn ngữ nhỏ
  2. Tuần tự hóa JSON
  3. Kiểm tra dựa trên đặc điểm kỹ thuật
  4. Trình phân tích cú pháp
  5. Chức năng song song hoàn toàn
  6. Trạng thái hoàn toàn hoạt động

Phần III: Các mẫu thiết kế chức năng

  1. Trường hợp trừu tượng
  2. Monoids
  3. Diễn viên vui nhộn
  4. Đơn nguyên
  5. Người chơi ứng dụng
  6. Cấu trúc dữ liệu có thể duyệt và có thể gập lại
  7. Dấu phẩy

Phần IV: Phá vỡ các quy tắc: hiệu ứng và I / O

  1. Tác dụng so với tác dụng phụ
  2. Xử lý luồng và I / O gia tăng
  3. Thực thi phạm vi hiệu ứng với hệ thống loại

31

Tôi xin lỗi vì tôi không biết các bài báo hoặc sách đề cập chi tiết các cách sử dụng khác nhau cho tất cả các cấu trúc đó, nhưng tôi có thể cung cấp cho bạn một vài liên kết đến các tài nguyên riêng lẻ.

Một mô hình khá phổ biến là xây dựng các máy biến áp đơn nguyên thay vì các máy biến áp đơn nguyên (xem thêm liên kết trong đoạn tiếp theo). Về cơ bản, nó có nghĩa là bạn xây dựng một thứ gì đó phải được kết hợp với các monads khác, dẫn đến một monads phức tạp hơn có thể xử lý các tính năng của cả hai.

Trong Real World Haskell có một vài chương về monads. Trong Chương 14. Đơn nguyên, các tác giả giải thích những điều cơ bản và một số cách sử dụng phổ biến (có thể, danh sách, trạng thái). Chương 15. Lập trình với đơn nguyên cung cấp nhiều giải thích hơn về cách sử dụng chúng một cách hiệu quả (nó cũng bao gồm đơn nguyên của người đọc). Chương sau giải thích cách sử dụng Parsec , nhưng có thể thú vị hơn khi tìm kiếm các bài báo về cách nó thực sự hoạt động: nó phải là một ví dụ thực sự tốt về việc sử dụng các monads được tổ chức tốt để phân tích cú pháp. Fianlly, Chương 18. Máy biến áp đơn nguyêngiới thiệu cách thức hoạt động của máy biến áp đơn nguyên và sau đó chỉ ra cách chế tạo từng bước một. Những cân nhắc đối với các phần cuối cùng của chương cũng rất thú vị.

Tôi đã đọc một lần một câu hỏi thực sự thú vị trên SO về việc sử dụng sáng tạo các monads . Các liên kết được đề xuất là những bài đọc tuyệt vời về chủ đề này. Với tinh thần đó, tôi đã cố gắng hỏi điều tương tự đối với các mũi tên : Tôi chắc chắn nhận được ít câu trả lời hơn câu trả lời trên các monads, nhưng vẫn có những câu trả lời thú vị.


Liên quan đến các mẫu OOP của nhóm bốn người, có một bộ 3 bài viết hay của IBM về chủ đề trong loạt bài Tư duy chức năng của họ . Ngôn ngữ chức năng đích là Scala. Họ tiến hành bằng cách giải thích các mẫu thiết kế thông thường trong OOP và chỉ ra cách chúng ánh xạ vào Scala.

  1. Tư duy chức năng: Các mẫu thiết kế chức năng, Phần 1 . Ở đây họ bao gồm các nhà máy, phương pháp mẫu, chiến lược, trọng lượng bay. Điểm mấu chốt là bằng cách có các hàm làm giá trị lớp đầu tiên, mọi thứ đơn giản hơn nhiều.
  2. Tư duy chức năng: Các mẫu thiết kế chức năng, Phần 2 . Đây là về java và groovy . Nó phù hợp với mẫu bộ điều hợp.
  3. Tư duy chức năng: Các mẫu thiết kế chức năng, Phần 3 . Ở đây họ nói về mẫu thông dịch viên. Một lần nữa, ngôn ngữ đích rất khó hiểu.

Bài viết phù hợp nhất với câu hỏi của bạn chắc chắn là bài đầu tiên, nhưng hai bài còn lại có thể là những bài đọc liên quan thú vị.


Cảm ơn, nhưng ý tôi là các loại mẫu khác nhau, chẳng hạn như các mẫu Đơn nguyên, Mũi tên, Ứng dụng không có GoF.
Konstantin Solomatov

@KonstantinSolomatov: Tôi đã hiểu sai câu hỏi của bạn, xin lỗi. Tôi đã thêm một số tham chiếu cho monads và mũi tên.
Riccardo T.

18

Jeremy Gibbons có blog Patterns in FP , cuối cùng được định đoạt để trở thành cuốn sách mà bạn đang yêu cầu. Tất nhiên, điều đó vẫn chưa ở trong tình trạng hữu ích như bạn có thể muốn lúc này, nhưng anh ấy xứng đáng được khuyến khích!

Trong khi đó, tôi sẽ nói +1 cho Typeclassopedia của Brent Yorgey. Nó thực sự hữu ích, và nếu có những phần sau gây nhầm lẫn, thì trang web này là một nơi tốt để tìm hiểu sâu hơn về chúng. Tôi biết Brent giữ nó trong quá trình xem xét. Nếu anh ấy không tiếp cận được độc giả của mình, hãy giúp anh ấy một chút.



5

Bạn đã đọc các chương sau của Learn You a Haskell for Great Good chưa?

  • Chương 6 bao gồm các bản đồ và các nếp gấp, là hai trong số các "mẫu thiết kế" quan trọng hơn trong các ngôn ngữ chức năng.

  • Các chương từ 11-13 bao gồm Diễn viên thú vị, Diễn viên thú vị ứng dụng và Đơn nguyên, theo thứ tự đó. Điều này rất hữu ích - nhiều hướng dẫn giới thiệu Functors và sau đó là Monads, sau đó giới thiệu Functors ứng dụng ở cuối (nếu chúng hoàn toàn bao gồm). Thứ tự trong LYAH tốt hơn, bởi vì chuyển từ Functors => Functors ứng dụng => Monads đưa bạn dần dần lên bậc thang về tính tổng quát và sức mạnh.

  • Chương 14 trình bày về Zippers - bạn có thể coi đây là các lớp chứa một cách hiệu quả với con trỏ đến một phần dữ liệu cụ thể, có nghĩa là bạn có quyền truy cập và cập nhật O (1) tại vị trí con trỏ.

Nó không bao gồm Mũi tên hoặc Dấu phẩy, là một chủ đề nâng cao hơn trong Haskell. Để hiểu cách và tại sao sử dụng Arrows hoặc Comonads, bạn chắc chắn phải nắm chắc về Monads rồi, vì vậy tôi không nghĩ đây là vấn đề - LYAH chắc chắn nhắm vào người mới bắt đầu của thị trường Haskell.


1
Vâng, tôi đã đọc cuốn sách. Tôi thích nó rất nhiều. Thật không may, nó không giấu mũi tên và nhiều mẫu nâng cao khác. Tôi cũng muốn đọc thêm về Đơn nguyên và Đơn vị đăng ký (ví dụ: LYHGG không bao gồm đơn nguyên tiếp tục).
Konstantin Solomatov
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.