2012-07-13 25 views
11

tôi vừa mới bắt đầu với Clojure. Tôi đang đọc this. Tôi không hiểu sự khác biệt giữa cách các biểu mẫu đặc biệt được triển khai và cách chức năng và macro được triển khai tại đó nóiClojure: sự khác biệt giữa cách các biểu mẫu, chức năng và macro đặc biệt được triển khai

Gần như tất cả các chức năng và macro được triển khai trong mã nguồn Clojure. Sự khác biệt giữa các hàm và macro được giải thích sau. Các biểu mẫu đặc biệt được trình biên dịch Clojure nhận ra và không được triển khai trong mã nguồn Clojure.

Ai đó có thể giải thích sự khác biệt giữa hai thứ? (Thực hiện trong mã nguồn Clojure và không được thực hiện trong mã nguồn Clojure)

+0

Biểu mẫu đặc biệt tương tự với các từ khóa như "nếu" bằng các ngôn ngữ khác. – Cubic

Trả lời

6

thực hiện trong mã nguồn Clojure

Mã cho tính năng đặc biệt/trừu tượng được thực hiện bằng ngôn ngữ riêng của mình clojure tức là trong .clj tập tin.

Chưa được triển khai trong mã nguồn clojure

Nó được thực hiện trong mã Java.

Kiểm tra mã Clojure trên github và bạn sẽ thấy rằng có mã Java cũng như mã clojure.

2

có lẽ là một hữu ích hơn, từ quan điểm của tôi, cách đặt nó sẽ là:

hình thức đặc biệt là các bộ phận của ngôn ngữ đó, nếu someon đã đưa họ ra khỏi bạn, bạn sẽ không thể thay thế chúng, và sẽ phải khôi phục chúng bằng các phương tiện khác.

ví dụ nếu một người nào đó gỡ bỏ cond bạn có thể viết vĩ mô cond riêng của bạn (nó chỉ là một wrapper xung quanh nếu. Ai nên loại bỏ nếu ... bạn sẽ phải ngã ba ngôn ngữ và đặt nó trở lại.

+1

Tôi không nghĩ định nghĩa này hữu ích hoặc chính xác.Ví dụ, 'let' có thể được thực hiện như một macro trên đầu trang của' fn', nhưng điều đó không có nghĩa là 'let' không phải là một dạng đặc biệt (bỏ qua ở đây là' let' thực sự là một macro trên đầu trang của đặc biệt dạng 'let *'). Và như các bài viết như chương trình [Lập trình không có gì] (http://experthuman.com/programming-with-nothing), thực sự là dạng đặc biệt duy nhất bạn cần * là chức năng. – amalloy

+0

Nhưng là câu trả lời của @Arthur Ulfeldt trong tinh thần của Clojure? Có lẽ anh ta sẽ thẳng ra những phần không chính xác. – octopusgrabbus

0

Special forms là . khối Clojure của nguyên thủy xây dựng tính toán, trên đó tất cả các phần còn lại của Clojure được xây dựng

Functions là những giá trị hạng nhất trong Clojure; tạo con nào rơi xuống dưới dạng đặc biệt fn

1

cộng với một trích dẫn từ. book Lập trình Clojure bởi Chas Emerick, mà tôi nghĩ là rất hữu ích khi hiểu các dạng đặc biệt của Clojure. :]

Hình thức đặc biệt là các khối xây dựng nguyên thủy của Clojure, trên hết tất cả các phần còn lại của Clojure đều được tạo.

Mọi thứ không phải là biểu mẫu đặc biệt được triển khai trong chính Clojure bằng cách khởi động từ tập hợp các hoạt động nguyên thủy hạn chế đó. Thật vậy, nếu bạn có động lực như vậy, bạn có thể thực hiện Clojure (hoặc ngôn ngữ khác do bạn chọn) từ đầu, theo cách riêng của bạn, trên các dạng đặc biệt của Clojure.

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