Usted podría intentar FUNCTION-LAMBDA-EXPRESSION:
(function-lambda-expression #'foo)
pero no es garantizado para trabajar ("... implementaciones son libres de volver` `nil, verdadera, nil '' en todos los casos ...").
Por ejemplo, en CCL:
CL-USER> (setq ccl:*save-definitions* t)
T
CL-USER> (defun x (x y) (+ x y))
X
CL-USER> (function-lambda-expression #'x)
(LAMBDA (X Y) (DECLARE (CCL::GLOBAL-FUNCTION-NAME X)) (BLOCK X (+ X Y)))
NIL
X
En SBCL, puede intentar (setq sb-ext:*evaluator-mode* :interpret)
(no probado). Tal vez haya otras maneras de lograr esto en SBCL (puede buscar un análogo de *save-definitions*
o incluso probar diferentes configuraciones de OPTIMIZE
), pero no las conozco. Tenga en cuenta que las funciones ingresadas en el REPL no se compilarán después de configurar *evaluator-mode*
en :interpret
, por lo que es probable que experimente un peor rendimiento.
Tu definición es incorrecta: x es una función y no se puede usar con + – bandi
bandi: 'x' es solo un símbolo. En ese contexto, se referiría a una variable. (Vea el ejemplo de Danlei a continuación.) – Ken
Agregué una posible solución (no probada) para SBCL a mi respuesta. – danlei