REPL là viết tắt của Read Eval Print Loop.
(loop (print (eval (read))))
Trên đây chỉ là khái niệm, mã REPL thực sự phức tạp hơn nhiều (với xử lý lỗi, gỡ lỗi, ...).
Bạn có thể đọc tất cả các loại dữ liệu trong Lisp mà không đánh giá nó. Đánh giá là một bước riêng biệt - độc lập với việc đọc dữ liệu.
Có tất cả các loại hàm IO trong Lisp. Sự phức tạp nhất của các hàm được cung cấp thường là READ, nó đọc các biểu thức s. Có một tùy chọn trong Common Lisp cho phép đánh giá trong READ, nhưng có thể và nên được tắt khi đọc dữ liệu.
Vì vậy, dữ liệu trong Lisp không nhất thiết là một chương trình và thậm chí nếu dữ liệu là một chương trình, thì Lisp có thể đọc chương trình dưới dạng dữ liệu - mà không cần đánh giá. REPL chỉ nên được nhà phát triển sử dụng và không được tiếp xúc với người dùng tùy ý. Để nhận dữ liệu từ người dùng, người ta sử dụng các hàm IO bình thường, bao gồm các hàm như READ, có thể đọc các biểu thức S, nhưng không đánh giá chúng.
Dưới đây là một vài điều người ta không nên làm:
sử dụng READ để đọc dữ liệu tùy ý. ĐỌC ví dụ cho phép một người đọc dữ liệu thực sự lớn - không có giới hạn.
đánh giá trong READ ('đọc eval'). Điều này nên được tắt.
ký tự đọc từ I/O và gọi chức năng biểu tượng của họ
đọc cấu trúc dữ liệu theo chu kỳ với READ, khi các chức năng bạn mong đợi danh sách đơn giản. Đi xuống một danh sách theo chu kỳ có thể giữ cho chương trình của bạn bận rộn trong một thời gian.
không xử lý lỗi cú pháp trong khi đọc từ dữ liệu.
Nguồn
2010-06-08 19:08:54
+1 câu trả lời hay. – rook