Fexpr có phần trực giao để đánh giá lười biếng/háo hức.
Cách tiếp cận chức năng thông thường là đánh giá các đối số cho một hàm rồi gọi nó trên kết quả. Lazy eval vẫn hoạt động như thế này, nó chỉ trì hoãn việc đánh giá cho đến khi ngay lập tức trước khi tham số được sử dụng.
Cách tiếp cận macro thông thường là chuyển các đối số chưa được định giá vào mẫu đánh giá bất kỳ thứ gì không được trích dẫn. Các mảnh kết quả của AST được tiêm vào trang web cuộc gọi, nơi nó thường được đánh giá một lần nữa. Điều này làm việc nhiều như vậy với eval lười biếng.
Phương pháp tiếp cận fexpr điên rồ trong lịch sử là chuyển các đối số không được đánh giá đến hàm, điều này làm thỏa mãn chúng. Kết quả được tiêm trực tiếp vào trang cuộc gọi và thường không được đánh giá tự động.
Fexpr là khá gần với một biến đổi tùy ý. Vì vậy, bạn có thể triển khai các macro và lambdas với chúng. Bạn cũng có thể thực hiện bất cứ điều gì lai của mong muốn/lười biếng đánh giá bạn muốn. Tương tự như vậy, bạn có thể thực hiện fexpr mặc định cho các eval lười biếng và các lời gọi rõ ràng đến eval() ở nhiều nơi khác nhau để buộc hành vi háo hức.
Tôi không nghĩ rằng tôi sẽ mô tả fexpr như là một giải pháp dễ dàng để thực hiện eval lười biếng mặc dù, trong một chữa bệnh là tồi tệ hơn ý nghĩa bệnh tật.
Nguồn
2015-10-07 08:58:11
Bởi fexprs, bạn đang đề cập đến [macro] (http://vi.wikipedia.org/wiki/Macro_ (computer_science) #Lisp_macros) hoặc thực tế [fexprs] (http://en.wikipedia.org/ wiki/Fexpr)? Tôi hỏi vì phần lớn các macro sử dụng Lisps hiện đại thay vì fexprs. – malisper
FEXPR chết trong dòng chính của Lisp vào những năm 80 và thay thế bằng các macro. Macro dành cho cú pháp trừu tượng. Với việc đánh giá lười biếng tất cả các biểu mẫu đặc biệt có thể là các hàm do đó bạn có thể thực hiện cú pháp với các hàm do việc đánh giá không xảy ra cho đến khi bạn cần một cái gì đó được tính toán. Thông thường đây là những ngôn ngữ khác nhau vì vậy tôi không thấy làm thế nào hai được so sánh khi họ có lẽ không bao giờ gặp nhau trong một ngôn ngữ. – Sylwester
@malisper Có, tôi đang đề cập đến fexprs thực tế hoặc "gọi theo văn bản" nếu bạn muốn. –