Đề án mang tính biểu tượng đồng tính vì các chương trình của nó có cách hiểu là cấu trúc dữ liệu.
'(define (foo x) (* x x))
là một danh sách, phần tử đầu tiên trong số đó là define
, thứ hai (foo x)
(danh sách), và vân vân. Dấu ngoặc kép '
có nghĩa là: không diễn giải điều này, hãy để nó dưới dạng danh sách. Nếu chúng tôi xóa '
, chúng tôi nhận được
(define (foo x) (* x x))
là định nghĩa chức năng Đề án. Vì các định nghĩa chương trình Scheme là các biểu thức danh sách lồng nhau (và do đó là một loại "các cú pháp cây cú pháp"), và Scheme là một ngôn ngữ động, bạn có thể chơi các thủ thuật với điều này để xây dựng các hệ thống tạo mã/macro rất mạnh.
Bây giờ Java không phải là biểu tượng đồng tính đơn giản vì nó không cung cấp các loại "chương trình literals" mà đánh giá để phân tích cú pháp mảnh cây. Tất nhiên, bạn có thể xác định một chuỗi
String helloWorld =
"class Hello { public static void main(System.out.println(\"Hello, world!\"); }";
mà bạn có thể phân tích cú pháp và chuyển sang trình biên dịch, nhưng thật khó xử vì đó là chuỗi chứ không phải là thuật ngữ có cấu trúc.
Nguồn
2011-06-27 12:26:58
Tôi không nghĩ nó có ý nghĩa gì nhiều, như được giải thích ở đây: http://www.expressionsofchange.org/dont-say-homoiconic/ –