2010-09-22 28 views
6

Theo bạn, ngôn ngữ nào bạn nghĩ là tốt nhất để triển khai monads (Python/Ruby/LISP) ?, ai cũng có thể cho tôi biết một số cách sử dụng của monads (vui lòng đưa ra ví dụ), giống như trường hợp ngoại lệ?Một số ngôn ngữ và sử dụng cho monads

Cảm ơn trước

+0

Tôi đã thay đổi tiêu đề, vì trước đó đã lừa dối người qua đường ngẫu nhiên bởi suy nghĩ câu hỏi này là tranh luận. Để giữ cho câu hỏi không bị đóng, tôi đã chỉnh sửa tiêu đề. –

+0

Ok cảm ơn ...... – Ishihara

Trả lời

19

All About Monads - huyền thoại hướng dẫn liệt kê tất cả các monads tiêu chuẩn và đưa ra rất nhiều ví dụ thực tế.

Các monads phổ biến mà bạn có thể gặp ngay cả trong các ngôn ngữ chính là Maybe, ListContinuation. Một số người cũng nghĩ rằng bản thân jQuery là một đơn nguyên (vì nó theo sau monadic axioms).

Đối với sự lựa chọn ngôn ngữ, Haskell và các dẫn xuất của nó đang sử dụng monads như một khái niệm cơ bản, tuy nhiên, như một tùy chọn, xây dựng monads là có thể bằng nhiều ngôn ngữ hiện đại. Để làm quen với khái niệm đơn nguyên, tôi nên chọn ngôn ngữ mà tôi cảm thấy thoải mái nhất.

+0

Hướng dẫn tuyệt vời! – Ishihara

+0

"Tất cả về monads" dường như đã biến mất: (.. gần nhất tôi có thể tìm thấy ở đây: http://en.wikibooks.org/wiki/Haskell/Understanding_monads (đây là lần đầu tiên trong số 6 trang) .Nếu bạn thấy bài viết gốc một lần nữa, xin vui lòng cho tôi biết – laher

+0

@ amir75, thx cho chỉ ra.Tôi đã cập nhật liên kết –

1

Ví dụ: xem Philip Wadler, "Monads for programming programming".

7

Trong thứ tự ưu tiên:

  1. Haskell
  2. F #
  3. Scala
  4. C#

Monads theo thứ tự giảm sự đơn giản:

  1. Có lẽ (Exception)
  2. đọc
  3. Writer
  4. Nhà nước
  5. Parser
  6. Async
+0

Không có OCaml hoặc được liệt kê với F #? – wheaties

+1

Ocaml không có đường cú pháp được xây dựng cho monad tiếc là – gandjustas

+7

Scala> F #. Tại sao? Đơn giản. Trong Scala, bạn có thể viết các hàm hoạt động trên bất kỳ đơn nguyên nào, mà bạn không thể trong F #, bởi vì nó đòi hỏi các kiểu có mức độ cao hơn. –

3
+2

mặc dù monads không phải là thành ngữ trong clojure (trong hầu hết các trường hợp có một cách alt để có được mục tiêu tương tự với các tính năng khác của ngôn ngữ), và nó chính thức có rất nhiều hackery macro, nó có thể sử dụng chúng. //intensivesystems.net/tutorials/monads_101.html, http://erl.nfshost.com/2010/09/05/bind-unit-and-all-that-2 và http://onclojure.com/2009/06/24/protecting-mutable-state-in- tiểu bang-monad / – jneira

Các vấn đề liên quan