Là lập trình viên Lisp, bạn học cách nghĩ về nguồn chương trình dưới dạng dữ liệu. Nó không còn là văn bản tĩnh mà là dữ liệu. Trong một số hình thức của Lisp chương trình chính nó là cấu trúc dữ liệu, được thực hiện.
Sau đó, tất cả các công cụ đều được định hướng theo cách đó. Thay vì một bộ xử lý macro văn bản, Lisp có một hệ thống macro hoạt động trên các chương trình dưới dạng dữ liệu. Việc chuyển đổi các chương trình sang và từ văn bản cũng có các công cụ của nó.
Hãy nghĩ về việc thêm hai yếu tố của một vector:
(let ((v (vector 1 2 3)))
(+ (aref v 0)
(aref v 1)))
Không có gì bất thường về nó được. Bạn có thể biên dịch và chạy nó.
Nhưng bạn cũng có thể làm điều này:
(let ((v (vector 1 2 3)))
(list '+
(list 'aref v 0)
(list 'aref v 1)))
Đó trả về một danh sách với một biểu tượng dấu cộng và hai danh sách con. Các danh sách con này có ký hiệu làf, sau đó là giá trị mảng của v và giá trị chỉ mục.
Điều đó có nghĩa là chương trình được xây dựng chứa các ký hiệu thực sự, nhưng cũng có dữ liệu. Mảng này thực sự là một phần của danh sách con. Vì vậy, bạn có thể xây dựng chương trình và các chương trình này là dữ liệu và có thể chứa dữ liệu tùy ý.
EVAL sau đó đánh giá chương trình dưới dạng dữ liệu.
CL-USER 17 > (setf *print-circle* t)
=> T
Ở trên cho chúng tôi biết máy in nên in cấu trúc dữ liệu tròn sao cho danh tính được giữ nguyên khi đọc lại.
CL-USER 18 > (let ((v (vector 1 2 3)))
(list '+
(list 'aref v 0)
(list 'aref v 1)))
=> (+ (AREF #1=#(1 2 3) 0) (AREF #1# 1))
Bây giờ chúng ta hãy eval dữ liệu như một chương trình Lisp:
CL-USER 19 > (EVAL (let ((v (vector 1 2 3)))
(list '+
(list 'aref v 0)
(list 'aref v 1))))
=> 3
Nếu trình biên dịch của bạn hy vọng văn bản như là nguồn người ta có thể xây dựng các văn bản, nhưng họ không bao giờ có thể tham khảo dữ liệu trực tiếp. Đối với việc xây dựng nguồn dựa trên văn bản này, nhiều công cụ đã được phát triển, nhưng nhiều công cụ này có xu hướng hoạt động theo các giai đoạn. Trong Lisp, chức năng thao tác dữ liệu có thể được áp dụng trực tiếp để thao tác các chương trình và chức năng này được tích hợp trực tiếp và một phần của quá trình đánh giá.
Vì vậy, Lisp cung cấp cho bạn thêm mức độ tự do và cách suy nghĩ mới.
từ ngữ của bạn là "chủ quan và tranh luận", nhưng đây vẫn là một câu hỏi thú vị. Bạn có thể làm mềm ngôn ngữ của bạn không? –
Vâng, xin lỗi nếu tôi hơi cùn. Sẽ thay đổi. –