В чем разница между процедурой и #'процедурой в Lisp/Clojure?

В чем разница между оценкой double и #'double в Clojure/Lisp?

1:2 user=> double
#<core$double__4077 clojure.core$double__4077@1acd47>
1:3 user=> #'double
#'clojure.core/double

person unj2    schedule 22.07.2009    source источник


Ответы (1)


В Clojure #'foo — это сокращение от (var foo), которое возвращает объект переменной, на который ссылается foo, а не его значение. Посмотрите его в ссылке:

Я не уверен, хотите ли вы также знать значение в Лиспе: в Common Lisp #'foo — это сокращение для (function foo), которое используется для доступа к значению функции, связанному с именем foo, когда оно не находится в операторе. должность.

person Svante    schedule 22.07.2009
comment
немного неправильно. (функция foo) ищет функциональное значение true, но не обязательно по символу. В лексической функции нет задействованных символов, поэтому она ищет функциональное значение, привязанное к имени (!) foo из лексического окружения. - person Rainer Joswig; 22.07.2009
comment
Правильно, исправлено. Я действительно должен исправить свою склонность говорить символ, когда я имею в виду имя. - person Svante; 22.07.2009