2010-09-16 27 views
6

Trong LISP trước đây là ngôn ngữ lập trình chức năng mạnh mẽ duy nhất, theo như tôi hiểu. Bây giờ có rất nhiều, tại sao mọi người vẫn sử dụng LISP với cú pháp kỳ lạ của nó? Có một tính năng sát thủ độc nhất vô nhị không?Tại sao nên sử dụng LISP ngay hôm nay, khi có Scala, Erlang, Haskell vv

+4

Ngày nay, mọi người sử dụng Lisp chứ không phải LISP. Các phương ngữ được sử dụng nhiều nhất là Common Lisp, Scheme và Clojure. – Svante

+17

Chờ đã, bạn đang so sánh nó với Scala, Erlang, Haskell, và bạn nghĩ * Lisp * có "cú pháp lạ"? :-) – Ken

+2

Trong khi cú pháp Lisp có thể là bất thường nếu bạn đến từ một nền C'ish nó thực sự có cú pháp thường xuyên nhất của bất kỳ ngôn ngữ tôi đã từng nhìn thấy. C, Java, vv tất cả đều có một loạt các quy tắc cú pháp cho bất cứ điều gì là thuận tiện vào thời điểm đó, trong lisp cú pháp là AST (về bản chất) vì vậy nó vô cùng thường xuyên. – asm

Trả lời

11

Đầu tiên, Lisp nói chung và Lisp chung nói riêng là "đa mô hình" hơn "chức năng". Từ đây, tôi sẽ chủ yếu thảo luận về Common Lisp (CL).

Mặc dù vậy, không có "một tính năng sát thủ". CL là một ngôn ngữ lập trình có thể lập trình, giúp dễ dàng thực hiện lập trình meta. Nghĩa là, bạn thường có thể thực hiện những điều "siêu cấp" trực tiếp bằng ngôn ngữ thay vì phải tiếp cận với một bộ xử lý trước để chuyển đổi văn bản thành ngôn ngữ cơ sở của bạn.

CL cũng có một hệ thống con đối tượng rất mạnh (CLOS), cho đến nay, đã hỗ trợ bất cứ điều gì tôi muốn làm với các cấu trúc phân cấp lớp và/hoặc phương thức.

Theo cú pháp, tôi đoán nó khác một chút so với cú pháp cổ điển của ngôn ngữ "Gia đình Algol", nhưng nó không còn ít và có thể ít lạ hơn APL.

8

Có một tính năng sát thủ độc đáo. Nó được gọi là một hệ thống macro. Với các macro, bạn có thể mở rộng ngôn ngữ của mình và giúp dễ dàng tạo các DSL tuyệt vời. Loại điều này sẽ khó khăn (và không phải là tốt đẹp) để thực hiện với Scala, Erlang hoặc Haskell.

Cú pháp hoặc thiếu nó là điều mà nhiều người nói dối thực sự thích bởi vì nó mang đến sự đồng nhất tuyệt vời, cái gì đó thiếu nhiều ngôn ngữ. Đối với một lập trình C hoặc Java chuẩn, cú pháp Erlang hoặc Haskell là lạ quá nên điều gì tệ hơn về cú pháp khác mà nó trông lạ.

Một câu hỏi khác bạn nên trả lời là tại sao các ngôn ngữ khác tốt hơn thì Lisp, tính năng nào là Lisp bị thiếu?

Nhưng dĩ nhiên là trường hợp nhiều ngôn ngữ hiện đại học được rất nhiều từ Lisp và có nhiều ngôn ngữ hơn có thể được sử dụng cho cùng một vấn đề.

Đừng quên rằng Lisp không phải là một ngôn ngữ có loại phương ngữ Lisp khác nhau. Scheme, Common Lisp hoặc Clojure và tất cả đều có sự tập trung khác nhau.

Vì vậy, câu hỏi ngôn ngữ để sử dụng chỉ có thể được trả lời bằng cách thử chúng đều có một cái gì đó khá đặc biệt về chúng. Erlang với các diễn viên, Haskell và Scala có các hệ thống kiểu điên rồ này, Lisps có hệ thống macro tuyệt vời .....

+1

Có Lisp Flavored Erlang (LFE) cung cấp cú pháp lisp đưa macro vào Erlang. – boring

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