Bạn muốn tìm kiếm sự cân bằng giữa tính đơn giản và sạch sẽ, các tính năng hấp dẫn và một nền tảng cho phép bạn viết phần mềm thú vị và hữu ích (cho chính bạn) cũng như phục vụ như một công cụ học tập. (Điều cuối cùng này sẽ giúp bạn tiếp tục và học hỏi lâu hơn.) Dưới đây là một số khả năng:
Kế hoạch. Có lẽ là sạch nhất trong tất cả các phương ngữ. Đây không phải là nghi ngờ tại sao The Little Schemer được dịch từ LISP thành Scheme. Đặc điểm kỹ thuật tiêu chuẩn của Đề án thứ năm, R5RS , là một nền giáo dục tuyệt vời trong và của chính nó; nó có thể là ngôn ngữ và đặc tả thư viện đẹp nhất mà tôi từng đọc, cũng như là ngôn ngữ ngắn nhất mà toàn diện một cách hợp lý. Các PLT Scheme (nay Racket) nền tảng bao gồm một phiên dịch khá tốt và trình biên dịch, là tốt cho kịch bản, và cũng có một số công cụ trực quan mà làm cho nó tuyệt vời cho việc học.
Lisp chung. Có lẽ là biến thể di động và toàn diện nhất, đây rất có thể là những gì bạn muốn nếu bạn muốn viết những thứ như phần mềm thương mại. Tiêu chuẩn xác định các thư viện mở rộng và nhiều thư viện khác nữa có sẵn, nó có CLOS , có thể sẽ dạy bạn nhiều hơn về OO hơn bất kỳ ngôn ngữ OO nào có thể và một số trình biên dịch rất tốt. Nhược điểm bao gồm một số vấn đề mà Scheme không có (chẳng hạn như có một không gian tên riêng cho các biến tham chiếu đến các hàm), không sạch sẽ và đơn giản (như trường hợp của bất kỳ thứ gì phải có phần mở rộng và làm cho các thỏa hiệp cần thiết cho các ứng dụng lớn trong thế giới thực), không có macro hợp vệ sinh và nhấn mạnh đệ quy ít hơn nhiều so với Scheme.
Áo choàng.Điều này chạy trên JVM, có thể giúp nó có chỗ đứng ngay tại đó cho các nhà phát triển Java. Nó có một vài mụn cóc (ví dụ, bạn phải yêu cầu rõ ràng tối ưu hóa cuộc gọi đuôi, mặc dù điều này có thể thay đổi một ngày nào đó nếu TCO được thêm vào JVM). Các macro, mặc dù không hợp vệ sinh, nhưng có một số tính năng giúp bạn tránh bị bắt biến, vì vậy bạn có thể nắm bắt các biến nếu bạn thực sự muốn, đồng thời ít có nguy cơ vô tình làm như vậy hơn trong CL. Bạn có thể dễ dàng truy cập vào tất cả các thư viện Java; đó có lẽ là một điều tốt cho mã "thế giới thực" và khá vô nghĩa về mặt học tập. Nó có một bộ thư viện cho cấu trúc dữ liệu liên tục và hỗ trợ cho STM, điều này làm cho nó rất thú vị theo quan điểm đồng thời; điều này làm cho nó có lẽ là đặt cược tốt nhất của bạn nếu bạn ' quan tâm đến việc tìm hiểu thêm về các phương pháp mới để xử lý lập trình đồng thời và song song. Có vẻ như Clojure có thể sử dụng được cho các ứng dụng sản xuất lớn như Java, theo nghĩa là nó sẽ có khả năng thực hiện "những thứ xấu xí" bạn làm trong các ứng dụng sản xuất mà bạn không muốn làm và không làm khi bạn đang học.
Emacs Lisp. Về mặt LISP, đây không phải là một trong những ví dụ tốt hơn hiện có. Một trong những lỗi lớn nhất của nó là phạm vi động, nhưng cũng có nhiều lỗi khác. Tuy nhiên, nếu bạn là người dùng Emacs, đây có thể là công cụ mạnh mẽ nhất mà bạn có thể học để cải thiện việc sử dụng trình chỉnh sửa của mình. Tuy nhiên, bạn thực sự học được bao nhiêu khi học Emacs Lisp, ngoài cách mở rộng Emacs, đối với tôi là một câu hỏi mở; Tôi không biết các kỹ thuật thú vị như hàm bậc cao thực sự được sử dụng trong Emacs Lisp như thế nào.
Cập nhật 2018
Đã gần một thập kỷ kể từ khi tôi viết bài đăng này và họ ngôn ngữ Lisp hiện đang có được sức hút đáng kể trong nhận thức của các lập trình viên nói chung. Phần lớn điều này dường như liên quan đến Clojure, không chỉ trở thành một phương ngữ riêng biệt của Lisp theo đúng nghĩa của nó, giới thiệu nhiều ý tưởng hay của riêng nó, mà còn có một phiên bản gần giống hệt nhắm mục tiêu JavaScript và đã truyền cảm hứng cho nhiều Lisp khác nhắm mục tiêu các nền tảng khác. Ví dụ: Hy nhắm mục tiêu CPython AST và bytecode, trước tiên nhắm đến khả năng tương tác với Python, nhưng sử dụng ý tưởng Clojure "khi nghi ngờ." (Mặc dù từ các cam kết mới nhất, sau này có thể thay đổi một chút.)
Thay đổi lớn mà điều này mang lại trong quá trình ra quyết định của bạn là bạn cũng nên xem xét bất kỳ ngôn ngữ nào giống như Lisps hoặc Lisp có sẵn và tương thích với các ngôn ngữ hoặc nền tảng bạn đã sử dụng, có thể là Perl , Ruby , Erlang , Go hoặc thậm chí C ++ trên vi điều khiển .