¿Es posible encontrar la lista de argumentos de una función, dado un objeto de función (o el símbolo de una función) en el ceceo común?Determinación de la lista de argumentos de función en Common Lisp
Respuesta
Esto es diferente para cada aplicación CL pero el paquete Swank (proporciona limo que puede mostrar arglists en minibuffer Fe Emacs) envuelve esto en una sola función:
* (defun testfn (arg1 arg2 &key (arg3 :a)) (declare (ignore arg1 arg2 arg3)))
TESTFN
* (swank-backend:arglist #'testfn)
(ARG1 ARG2 &KEY (ARG3 :A))
Esto también funciona para los métodos:
* (defmethod testmethod ((arg1 t) arg2 &key (arg3 :a)) (declare (ignore arg1 arg2 arg3)))
STYLE-WARNING: Implicitly creating new generic function TESTMETHOD.
#<STANDARD-METHOD TESTMETHOD (T T) {1005670231}>
* (swank-backend:arglist #'testmethod)
(ARG1 ARG2 &KEY (ARG3 :A))
La forma más fácil de llegar Swank es utilizar Quicklisp.
No sé de una manera estándar, pero en SBCL puede usar sb-introspect:function-lambda-list
.
(defun test (a &rest rest &key (b 42)) nil)
(sb-introspect:function-lambda-list #'test)
=> (A &REST REST &KEY (B 42))
ANSI Common Lisp proporciona la función FUNCTION-LAMBDA-EXPRESSION, que puede devolver una expresión lambda si la implementación lo admite y la expresión ha sido grabada. En la expresión lambda, el segundo elemento es la lista de argumentos, como de costumbre.
De lo contrario, para devolver una lista de argumentos no está definida en el estándar ANSI Common Lisp y es parte de la implementación específica de Lisp. Por ejemplo, en algunas aplicaciones Lisp 'entregadas' esta información puede no estar presente.
Normalmente, la mayoría de las implementaciones de Common Lisp tendrán una función exportada ARGLIST en algún paquete interno.
- 1. Desenrolle/argumentos splat en Common Lisp
- 2. ¿Common Lisp equivalente a la función principal de Haskell? función
- 3. Función de persistencia en Common Lisp
- 4. Obtención de argumentos de línea de comando en Common Lisp
- 5. Clojure: ¿Equivalente a la función de lectura de Common Lisp?
- 6. Una función de recopilación eficiente en Common Lisp
- 7. Asociación en Common Lisp
- 8. Especificadores de tipo Common Lisp
- 9. Common Lisp - Utilizando una función como entrada a otra función
- 10. Secuencias en Common Lisp?
- 11. Webdevelopment en Common Lisp
- 12. En common-lisp, ¿cómo modifico parte de un parámetro de lista dentro de una función sin cambiar la lista original?
- 13. Eliminación de un tipo en Common Lisp
- 14. Common Lisp a Lisp-n?
- 15. Programación de Common Lisp Parallel
- 16. Transposición de listas en Common Lisp
- 17. Ejercicios de Common Lisp/Problemas
- 18. ¿Eliminando el "misterio-consing" en esta función Common Lisp?
- 19. Sistema de condición Common Lisp para la transferencia de control
- 20. Encuentra la lista más anidada dentro de una lista en Common Lisp
- 21. Almacenamiento de fechas en Common Lisp
- 22. Uso de etiquetas en Common Lisp
- 23. Introspección de clase en Common Lisp
- 24. Predijo Common Lisp
- 25. Best Common Lisp IDE
- 26. Renombrando lambda en Common Lisp
- 27. Dibujando árboles en Common Lisp
- 28. División entera en Common Lisp?
- 29. Palabra clave programática Common Lisp
- 30. embellecedor de código fuente para lisp (Common Lisp, Scheme, Clojure)
Swank como capa de compatibilidad? Interesante – sabof