Là ngôn ngữ lập trình đầu tiên của tôi, tôi quyết định học Haskell. Tôi là một sinh viên chuyên ngành triết học phân tích và Haskell đã cho phép tôi tạo nhanh chóng và chính xác các chương trình mà tôi quan tâm, chẳng hạn như bộ chuyển đổi để phân tích ngôn ngữ tự nhiên, trình dò định lý và thông dịch viên. Mặc dù tôi chỉ mới lập trình được hai tháng rưỡi, nhưng tôi thấy ngữ nghĩa và cú pháp của Haskell dễ học hơn nhiều so với các ngôn ngữ mệnh lệnh truyền thống, và cảm thấy thoải mái (hiện tại) với phần lớn cấu trúc của nó.
Tuy nhiên, lập trình trong Haskell giống như ma thuật, và tôi muốn mở rộng kiến thức của mình về lập trình. Tôi muốn chọn một ngôn ngữ lập trình mới để học, nhưng tôi không có đủ thời gian để chọn một ngôn ngữ tùy ý, bỏ nó và lặp lại. Vì vậy, tôi nghĩ tôi sẽ đặt ra câu hỏi ở đây, cùng với một số quy định về loại ngôn ngữ mà tôi đang tìm kiếm. Một số là chủ quan, một số nhằm mục đích dễ dàng chuyển đổi từ Haskell.
- Hệ thống loại mạnh. Một trong những phần yêu thích của tôi khi lập trình trong Haskell là viết khai báo kiểu. Điều này giúp cấu trúc suy nghĩ của tôi về các chức năng riêng lẻ và mối quan hệ của chúng với chương trình nói chung. Nó cũng giúp lập luận không chính thức về tính đúng đắn của chương trình của tôi dễ dàng hơn. Tôi quan tâm đến tính đúng đắn chứ không phải hiệu quả.
- Nhấn mạnh vào đệ quy hơn là lặp. Tôi sử dụng các cấu trúc lặp trong Haskell, nhưng triển khai chúng một cách đệ quy. Tuy nhiên, việc hiểu cấu trúc của một hàm đệ quy sẽ dễ dàng hơn nhiều so với một thủ tục lặp lại phức tạp, đặc biệt là khi sử dụng tổ hợp và các hàm bậc cao như bản đồ, nếp gấp và liên kết.
- Thưởng để học hỏi. Haskell là một ngôn ngữ bổ ích để làm việc. Nó hơi giống như đọc Kant. Tuy nhiên, kinh nghiệm của tôi vài năm trước với C thì không. Tôi không tìm C. Ngôn ngữ nên thực thi một mô hình thú vị về mặt khái niệm, mà theo ý kiến hoàn toàn chủ quan của tôi, những người thích C thì không.
Cân nhắc câu trả lời : Tất nhiên đây chỉ là những ghi chú. Tôi chỉ muốn trả lời tất cả những ai đã đưa ra những câu trả lời hợp lý. Bạn đã được rất hữu ích.
1) Một số phản hồi chỉ ra rằng một ngôn ngữ được đánh máy tĩnh, mạnh mẽ nhấn mạnh đến đệ quy có nghĩa là một ngôn ngữ chức năng khác. Trong khi tôi muốn tiếp tục hợp tác mạnh mẽ với Haskell, camccann và larsmans đã chỉ ra một cách chính xác rằng một ngôn ngữ khác như vậy sẽ "dễ dàng chuyển đổi quá nhiều." Những nhận xét này rất hữu ích, bởi vì tôi không muốn viết Haskell bằng Caml! Trong số các trợ lý chứng minh, Coq và Agda đều trông thú vị. Đặc biệt, Coq sẽ cung cấp một giới thiệu vững chắc về logic xây dựng và lý thuyết kiểu hình thức. Tôi đã dành một ít thời gian với vị từ bậc nhất và logic phương thức (Mendellsohn, Enderton, một số Hinman), vì vậy tôi có thể sẽ rất vui với Coq.
2) Những người khác rất ưa chuộng Lisp (Common Lisp, Scheme và Clojure). Từ những gì tôi thu thập được, cả Common Lisp và Scheme đều có tài liệu giới thiệu tuyệt vời ( Trên Lisp và The Reasoned Schemer , SICP ). Tài liệu trong SICP khiến tôi nghiêng về Scheme. Cụ thể, Đề án thông qua SICP sẽ bao gồm một chiến lược đánh giá khác, việc thực hiện sự lười biếng và cơ hội tập trung vào các chủ đề như liên tục, phiên dịch, tính toán tượng trưng, v.v. Cuối cùng, như những người khác đã chỉ ra, cách xử lý mã / dữ liệu của Lisp sẽ hoàn toàn mới. Do đó, tôi đang nghiêng nhiều về phương án (2), một Lisp.
3) Thứ ba, Prolog. Prolog có vô số tài liệu thú vị và miền chính của nó chính xác là miền mà tôi quan tâm. Nó có cú pháp đơn giản và dễ đọc. Tôi không thể bình luận thêm vào lúc này, nhưng sau khi đọc tổng quan về Prolog và đọc lướt một số tài liệu giới thiệu, nó xếp hạng với (2). Và có vẻ như sự cố gắng của Prolog luôn bị hack vào Haskell!
4) Trong số các ngôn ngữ chính, Python có vẻ thú vị nhất. Tim Yates làm cho các ngôn ngữ nghe rất hấp dẫn. Rõ ràng, Python thường được dạy cho các sinh viên chuyên ngành CS năm nhất; vì vậy nó phong phú về mặt khái niệm hoặc dễ học. Tôi sẽ phải nghiên cứu thêm.
Cảm ơn tất cả các đề xuất của bạn! Có vẻ như Lisp (Scheme, Clojure), Prolog hoặc một trợ lý bằng chứng như Coq hoặc Agda là những ngôn ngữ chính được khuyến nghị.