Tôi đang bối rối về cách defun công trình vĩ mô, vìtại sao defun không giống như (setq <name><lambda>)?
(defun x() "hello")
sẽ tạo ra chức năng x, nhưng biểu tượng x vẫn sẽ được cởi ra.
Nếu tôi sẽ ràng buộc một số lambda để x thì x sẽ có giá trị, nhưng nó sẽ không được xử lý bằng thông dịch viên là chức năng theo hình thức như thế này:
(x)
tôi nghĩ rằng nó có liên quan đến thực tế là defun nên định nghĩa hàm trong môi trường toàn cầu, nhưng tôi không chắc nó có ý nghĩa gì. Tại sao tôi không thể che giấu nó trong môi trường hiện tại?
Có cách nào để buộc trình thông dịch coi biểu tượng là hàm nếu một số lambda bị ràng buộc với nó không? Ví dụ:
(setq y (lambda() "I want to be a named function"))
(y)
P .: Tôi đang sử dụng SBCL.