2011-08-05 5 views
7

This guy cho rằng việc thêm fexprs vào LISP sẽ đơn giản hóa đáng kể việc triển khai ngôn ngữ trong lược đồ.Việc thêm f-exprs có đơn giản hóa việc triển khai macro từ các biểu thức cơ bản trong LISP không?

Here we see cách macro sẽ được triển khai bằng LISP của MacCarthy.

Câu hỏi của tôi là - việc thêm f-exprs có đơn giản hóa việc triển khai macro trong LISP không?

+2

Điều quan trọng về lisp là trừu tượng, không thực hiện. Sự cần thiết cho sự đơn giản của việc thực hiện phần lớn là không liên quan bên cạnh sự cần thiết cho sự đơn giản của sự trừu tượng hóa. Lấy eval, bạn có thể phù hợp với định nghĩa của nó trên bảng đen, nhưng điều duy nhất hữu ích của nó là dạy bạn về một khía cạnh của tính toán, cụ thể là đệ quy xác định một cái gì đó trong chính nó. Tính hữu ích của kiến ​​thức đó ít hơn nhiều so với tính hữu dụng của những gì eval cho phép. –

Trả lời

12

Tôi là anh chàng đó. :)

Fexprs, như trong ngôn ngữ hạt nhân, đơn giản hóa đáng kể ngôn ngữ - Kernel chỉ có ba được tạo sẵn: $ define! (để thêm một ràng buộc mới vào một môi trường), $ if (bình thường), và $ vau (tương tự như lambda, nhưng không đánh giá các đối số của nó).

Hơn nữa, macro (fexprs) có thể được sử dụng làm chức năng có thể - không giống như hiện tại Lisps, nơi macro hoạt động riêng biệt với thời gian chạy. Điều này làm cho ngôn ngữ tổng quát hơn.

Điều đó nói rằng, vẫn chưa có ứng dụng thực tế nào được viết bằng Kernel hoặc một Lisp mới với fexprs. Đây là một khu vực đang hoạt động của một số ít người.

+0

Tôi quan tâm vì tôi đã luôn luôn tìm thấy sự khác biệt giữa các macro và chức năng là một chút quá tùy ý. Làm thế nào dễ dàng để thêm những (thí nghiệm) để Clojure? – mikera

+2

Có lẽ rất khó. Fexprs yêu cầu giải thích, vì vẫn chưa có phương tiện nào để biên dịch chúng hiệu quả. [Bài đăng trên blog này] (http://axisofeval.blogspot.com/2011/06/john-shutts-blog.html) chứa các con trỏ tới các cuộc thảo luận của LtU nơi mọi người nói về các vấn đề triển khai. –

+0

Tôi có hiểu đúng là cách tiếp cận này chỉ thích hợp cho việc diễn dịch không? –