Tôi muốn học ngôn ngữ mới và tôi nghĩ bắt đầu với Lisp. Tôi muốn biết nếu tôi tìm hiểu Lisp tôi cũng biết Clojure (với nỗ lực tối thiểu), là có sự khác biệt lớn cú pháp giữa Lisp và Clojure?Có sự khác biệt lớn về cú pháp giữa Clojure và Lisp
Trả lời
Không có sự khác biệt lớn về cú pháp (chủ yếu là vì ngôn ngữ gia đình của Lisp có cú pháp gần như không), nhưng chắc chắn có sự khác biệt ở các khu vực khác. Clojure có rất nhiều tính năng lập trình hiện đại, đặc biệt phù hợp với khả năng mở rộng cao (diễn viên, tài liệu tham khảo, v.v.) không có trong Lisp "cổ điển" (như Common Lisp).
Clojure là một phương ngữ hoạt động, được hỗ trợ tốt của Lisp. Nếu bạn muốn tìm hiểu một Lisp, bạn có thể không thực sự đi sai với Clojure.
Bạn có thể tìm thêm thông tin trong câu trả lời cho Which Lisp should I learn?.
Tôi giả định bởi Lisp có nghĩa là Common Lisp, vì 'Lisp' chính nó là một gia đình ngôn ngữ (bao gồm Clojure) hơn là một ngôn ngữ cụ thể. Có một số thay đổi cú pháp trong đó Clojure được dự định là một Lisp hiện đại hơn. Ví dụ, bạn có thể tạo các vectơ với [] s, ánh xạ với {} s, không phải là một phần của Common Lisp. Và tất nhiên, Java interop chắc chắn sẽ trở thành một phần quan trọng của Clojure.
[] và {} được dành riêng cho tiện ích mở rộng người dùng trong CL. Các vectơ được viết dưới dạng # (...). Cú pháp ký tự ở cấp độ đó có thể được cung cấp bởi các thư viện - và thực sự là. Có lẽ CL là Lisp hiện đại hơn, bởi vì cú pháp người dùng có thể mở rộng và sử dụng [] và {} có thể được sử dụng bởi các thư viện? –
Lisp thường được gọi là chỉ Lisp. Tương tự như vậy, Lisp thường có nghĩa là Common Lisp. Gia đình Lisp thường được biểu thị là lisp, hoặc lisps. – Marko
Tôi nghĩ đó là công bằng khi nói rằng nếu bạn tìm hiểu các nguyên tắc của LISP bạn cũng sẽ biết nguyên tắc của Clojure và ngược lại. Tất cả chúng đều bắt nguồn từ cùng một triết lý, nhấn mạnh những thứ như:
Mã là dữ liệu. Macro là các hàm bình thường thao tác mã.
Sử dụng S-expressions để trình bày dữ liệu và mã.
Khái niệm về danh sách/chuỗi là cấu trúc cơ bản.
Lập trình hàm với chức năng hạng nhất.
Ngoài ra, có rất nhiều khác biệt về cú pháp, thư viện, môi trường thời gian chạy, v.v ... nếu bạn biết rõ hơn, thì cốt lõi các khái niệm sẽ quen thuộc nhưng vẫn còn rất nhiều khác biệt cơ bản.
Xem này list of ways that Clojure is different from other Lisps
Có sự khác biệt "nhỏ" giữa các hàm và macro. Chức năng là lớp đầu tiên. Macros thì không. – boucekv
90% những gì bạn học khi đang học Lisp đầu tiên của bạn sẽ chuyển sang tiếp theo của bạn.
vectơ sử dụng Clojure như các tham số lambda (arguments giá trị), nhưng bạn có thể viết một macro defun và lambda với sẽ trông như thế này trong Common Lisp. Clojure cũng có quyền truy cập vào các phương thức Java Object và đệ trình bằng cách sử dụng coma và tên trông giống như hàm bình thường gọi
(.toString 10) - sẽ gọi phương thức toString trên số 10 nhưng .toString không phải là một hàm. nếu bạn cố gắng kiểm tra giá trị của. toString nó ném exeption rằng. toString không được xác định biểu tượng.
Và cũng trong bán báo giá (chủ yếu là trong macro) thay vì sử dụng dấu phẩy của Clojure tylda.
- 1. Trong Lisp (Clojure, Emacs Lisp), sự khác biệt giữa danh sách và báo giá là gì?
- 2. Sự khác biệt giữa nguyên tử trong Lisp thường và nguyên tử trong Clojure là gì?
- 3. Sự khác biệt giữa thủ tục và thủ tụC# trong Lisp/Clojure là gì?
- 4. Sự khác nhau giữa Clojure, Scheme/Racket và Common Lisp là gì?
- 5. Emacs Lisp: sự khác biệt giữa (hàm (lambda ...)) và (lambda ...)?
- 6. Sự khác biệt giữa: while và: khi nào trong clojure?
- 7. Clojure - sự khác biệt giữa '(dấu nháy đơn) và `(backtick)
- 8. Sự khác biệt về sự khác biệt giữa Matplotlib giữa Agg và Cairo
- 9. Tại sao có sự khác biệt về tốc độ giữa vòng lặp của Clojure và phương pháp lặp lại
- 10. Sự khác biệt giữa definterface và defprotocol trong Clojure
- 11. Sự khác nhau giữa Lisp-1 và Lisp-2 là gì?
- 12. Sự khác biệt giữa nguyên tử và biểu tượng trong Lisp thường là gì?
- 13. Sự khác biệt giữa Delphi và Delphi.NET
- 14. Sự khác biệt về PHP giữa mảng() và []
- 15. Sự khác biệt giữa $ * và $ @
- 16. Sự khác biệt về Tastypie giữa list_allowed_methods và detail_allowed_methods
- 17. Sự khác biệt giữa SAXParser và XMLReader
- 18. Sửa Cú pháp Lisp
- 19. Sự khác biệt giữa fn và fn * là gì?
- 20. Sự khác biệt trong cú pháp RegEx giữa Python và Java
- 21. Sự khác biệt giữa Agda và Idris
- 22. Sự khác biệt giữa Phân tích cú pháp và Truyền đạt?
- 23. Sự khác biệt giữa trình biên dịch và trình phân tích cú pháp?
- 24. Có sự khác biệt nào giữa NSCountResultType và countForFetchRequest: lỗi: về hiệu suất không?
- 25. Sự khác biệt giữa ". +" Và ". +?"
- 26. Sự khác biệt giữa "**/* /" và "** /"?
- 27. Sự khác biệt giữa = và: =
- 28. Sự khác biệt giữa $ (...) và `...`
- 29. Sự khác biệt giữa. và #
- 30. Sự khác biệt về Java giữa FileWriter và BufferedWriter
Điều đó sai. Lisp có rất nhiều cú pháp. Tấn. Kiểm tra làm ví dụ cú pháp của DEFCLASS, DEFSTRUCT, LOOP và các cú pháp khác trong CL. Bên dưới là cú pháp cho biểu thức s - cũng không nhỏ. –
Điểm nhỏ vì mục đích rõ ràng, Rainer. Anh ta nói "gia đình Lisp". Tất cả các ví dụ bạn đã sử dụng là Common Lisp và tôi cho rằng ví dụ hợp lệ duy nhất bạn đưa ra là LOOP, chỉ có các dạng kết hợp cú pháp (từ khóa) ngoài danh sách. Mặc dù vậy, đối chiếu tất cả các ví dụ của bạn chống lại Đề án, nơi gần như mọi thứ đều là DEFINE và không có cấu trúc nào mà bạn đề cập tồn tại. – Shaun
@Shaun: Đề án đã xây dựng các từ khóa cú pháp và macro. Xem báo cáo Đề án. Nó bắt đầu với LET, LAMBDA, IF, ... Đừng nhầm lẫn giữa biểu thức là cú pháp Lisp. Cú pháp Lisp nằm trên đầu trang của s-expresssions. Lisp nói chung có một hình thức đơn giản cho các cuộc gọi chức năng. Nhưng mỗi Lisp có một số dạng cú pháp đặc biệt VÀ một số loại macro. MỌI macro đã có trong ngôn ngữ thực hiện SYNTAX. Cú pháp là cấu trúc của một ngôn ngữ. Các macro do người dùng định nghĩa là một cách trong mọi Lisp để có cú pháp mở rộng của người dùng. Ý tưởng 'không cú pháp' chỉ là một huyền thoại thường xuyên lặp lại. Mặt trái là sự thật. –