'foo
đánh giá biểu tượng FOO.
#'foo
đánh giá hàm được liên kết với tên FOO.
Trong Lisp, một biểu tượng có thể được gọi là hàm khi biểu tượng FOO có một hàm ràng buộc. Ở đây CAR là một biểu tượng có chức năng ràng buộc.
Nhưng điều này không làm việc:
(flet ((foo (a) (+ a 42)))
(mapcar 'foo '(1 2 3 4 5)))
Đó là bởi vì FOO như một biểu tượng không truy cập vào các chức năng từ vựng địa phương và hệ thống Lisp sẽ phàn nàn khi foo
không phải là một chức năng được xác định ở nơi khác.
Chúng tôi cần phải viết:
(flet ((foo (a) (+ a 42)))
(mapcar #'foo '(1 2 3 4 5)))
Ở đây (chức năng foo) hoặc ký hiệu viết tắt của nó # 'foo đề cập đến từ vựng chức năng FOO địa phương.
Cũng lưu ý rằng trong
(funcall #'foo ...)
vs
(funcall 'foo ...)
này sau đó có thể làm thêm một gián tiếp, vì nó cần phải tra cứu hàm từ biểu tượng, trong khi # 'foo biểu thị chức năng trực tiếp.
Tóm tắt:
Nếu một biểu tượng có chức năng ràng buộc, gọi một chức năng thông qua các biểu tượng hoạt động.
Nguồn
2011-02-05 10:15:37