10

Tôi đã viết mã cho một vài năm nay, không có gì quá phức tạp. C++ là những gì tôi biết rõ nhất. Gần đây tôi đã tình cờ gặp trang web của Paul Graham, viết mã kinh dị, và giờ đây.Tôi học cách gì để "khai sáng bản thân mình bằng những cách" của lập trình hàm?

Tôi học cách gì để "khai sáng bản thân mình bằng các cách" của lập trình hàm? Haskell, Scheme hoặc CLisp?

+0

Bạn cũng có Scala, dường như có một số động lượng: http://www.scala-lang.org/. Ngoài ra, đến từ một nền C + +, bạn có thể tìm thấy một số cấu trúc FP thú vị trong D: trong D bạn sử dụng (tinh khiết) FP bất cứ khi nào nó có ý nghĩa. –

+0

Trong khi chúng tôi đang ở máy ảo, F # là đối tác của Scala cho .NET. – Kos

Trả lời

5

Trong số ba, tôi muốn nói Đề án là tổng thể đơn giản nhất, nếu đó là mối quan tâm chính của bạn. SICP sử dụng Đề án, và chính nó là một nguồn tài nguyên tuyệt vời cho việc học lập trình theo cách chức năng.

Tuy nhiên, Common Lisp có nhiều tính năng nâng cao làm cho nó khá biểu cảm, chẳng hạn như xử lý lỗi mạnh mẽ (mạnh hơn ngoại lệ), multimethods và hỗ trợ aspect oriented programming.

Bạn có thể bắt đầu bằng một nhưng cuối cùng, bạn nên học nhiều ngôn ngữ.

+5

Lisp thường thực sự có rất nhiều tính năng tuyệt vời, nhưng hầu hết chúng không liên quan đến lập trình hàm. – Chuck

+0

@Chuck: rất đúng. Đó là một trong những lý do tôi đề nghị Scheme trên Common Lisp để bắt đầu. Tôi chỉ là một fan hâm mộ mà tôi không thể không đề cập đến một số. Vivant NCITS/J13. – outis

+0

Đề án là rất tốt khi bạn muốn hiểu các ngôn ngữ chức năng hoạt động như thế nào sau hậu trường. –

5

Cả ba đều tốt, tùy thuộc vào từng người.

Nếu quý vị quyết định Haskell, đây là một ressource lớn: learnyouahaskell và cũng real world haskell

4

Như những câu trả lời khác nói, cả ba đều tốt.

Nhưng nếu bạn quyết định về Lisp, thì tôi khuyên bạn nên đi theo số Clojure có lẽ là lần đầu tiên gần đây nhất của nó.

+2

Clojure là khá tốt đẹp nếu bạn muốn OO Lisp, nhưng đó là một sự lựa chọn nghèo nếu bạn muốn tìm hiểu lập trình chức năng. Nó thậm chí không làm loại bỏ cuộc gọi đuôi! – Porculus

+2

@Porculus: Clojure không thực hiện loại bỏ cuộc gọi đuôi nhờ sự cố tích hợp với Java, nhưng nó cho phép các giải pháp đệ quy với toán tử 'recur'. Từ những gì tôi biết về nó, nó vẫn có vẻ mạnh mẽ hơn chức năng hơn Common Lisp. – Chuck

+1

Clojure có nhiều chức năng hơn bất kỳ Lisp nào khác mà tôi biết - nó gần gũi hơn với Haskell về phong cách. Trình tự lười biếng, cấu trúc dữ liệu bất biến, khả năng kiểm soát chặt chẽ, OOP nản lòng vv ..... Đối với TCO - nó chiếm 99% số trường hợp với 'recur' và cung cấp giải pháp thay thế tốt cho 1% khác. Tôi có * không bao giờ * có vấn đề với TCO trong ba năm sử dụng Clojure ..... – mikera

18

Nếu bạn quan tâm đến lập trình hàm, Haskell là ngôn ngữ thuần túy duy nhất trong danh sách đó. Lisp phổ biến là một ngôn ngữ mô hình hỗn hợp chức năng yếu, và lược đồ là chức năng mạnh mẽ hơn nhưng vẫn không thuần khiết. Lisps rất thú vị vì những lý do khác, nhưng Haskell là khá nhiều nhà nước của nghệ thuật cho lập trình chức năng.

Ngẫu nhiên, lý do tôi khuyến khích các ngôn ngữ chức năng mạnh mẽ hơn như Haskell là vì phần lớn "lập trình chức năng học" đang học cách suy nghĩ về chương trình của bạn theo một cách khác. Nếu ngôn ngữ của bạn làm cho nó cảm thấy tự nhiên để viết bắt buộc, nó quá dễ dàng để rơi vào cách suy nghĩ và không bao giờ nhận ra có một cách khác nhau để làm điều đó.

+0

Tôi không nghĩ rằng nó tự nhiên theo sau rằng ngôn ngữ thuần túy hơn là phù hợp hơn với việc học lập trình chức năng. Nó cũng có thể làm cho rào cản để đi vào tư duy chức năng quá lớn. Cá nhân tôi đã tham gia lập trình chức năng với ruby, lua và python. OCaml mà tôi đã làm trước đó đã không làm cho tôi có được lập trình chức năng bởi vì nó quá xa lạ để cho phép tôi để có được các khái niệm. Tôi nghĩ rằng Đề án sẽ là một cách tiếp cận thực dụng hơn. –

4

'soi sáng bản thân mình bằng các cách' lập trình hàm?

Haskell là ví dụ mạnh nhất về phong cách chức năng, nhấn mạnh lập trình hàm thuần túy (không có tác dụng phụ), đánh máy tĩnh mạnh mẽ và thực hiện thực tế với sự nhấn mạnh về đa hướng song song, đồng thời có cộng đồng lớn (khoảng 2000) thư viện có sẵn trên http://hackage.haskell.org và nhiều tài nguyên trực tuyến).

Có phần nổi tiếng về cách đào tạo lại cách mọi người nghĩ về lập trình.

Nhưng đây là vận động chính sách và không phải là phiên câu hỏi và câu trả lời hữu ích trên stackoverflow. Bạn sẽ phải quyết định cho mình những gì bạn đang tìm kiếm để tìm hiểu.

3

Bạn đã nghe nói về F #, ML hoặc OCaml chưa? Ba ngôn ngữ này thuộc về họ ML.

F# là phương ngữ ML mới được Microsoft hỗ trợ và sẽ được xuất xưởng cùng với Visual Studio 2010.Những điều tốt về F # (hoặc các ngôn ngữ ML khác) là khi bạn lần đầu tiên bắt đầu, bạn có thể viết mã bắt buộc và tìm hiểu phong cách chức năng tốt dần dần.

Đây là ví dụ tôi đã viết cho Project Euler #2. Khi tôi lần đầu tiên làm điều đó, tôi đã sử dụng phong cách bắt buộc. Sau đó, tôi biết cách sử dụng trình tự lười biếng, đó là một khái niệm lập trình chức năng mạnh mẽ.

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