È possibile trovare l'elenco degli argomenti di una funzione, dato un oggetto funzione (o il simbolo di una funzione) in comune lisp?Determinazione dell'elenco degli argomenti delle funzioni in Common Lisp
risposta
Questo è diverso per ogni implementazione CL ma il pacchetto Swank (fornisce Slime che può mostrare arglists in minibuffer fe Emacs') avvolge questo in una singola funzione:
* (defun testfn (arg1 arg2 &key (arg3 :a)) (declare (ignore arg1 arg2 arg3)))
TESTFN
* (swank-backend:arglist #'testfn)
(ARG1 ARG2 &KEY (ARG3 :A))
Questo funzionerà anche per i metodi:
* (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))
Il modo più semplice per arrivare Swank è quello di utilizzare Quicklisp.
Non so di un modo standard ma in SBCL è possibile utilizzare 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 fornisce la funzione FUNCTION-LAMBDA-EXPRESSION, che può restituire un'espressione lambda se l'implementazione la supporta e l'espressione è stata registrata. Nell'espressione lambda, il secondo elemento è l'elenco degli argomenti, come al solito.
In caso contrario, la restituzione di un elenco di argomenti non è definita nello standard ANSI Common Lisp e fa parte dell'implementazione specifica di Lisp. Ad esempio, in alcune applicazioni Lisp "consegnate" queste informazioni potrebbero non essere presenti.
In genere la maggior parte delle implementazioni comuni di Lisp avrà una funzione esportata ARGLIST in alcuni pacchetti interni.
- 1. (comporre) in Common Lisp
- 2. srotolare/argomenti splat in Common Lisp
- 3. Memorizzazione delle date in Common Lisp
- 4. sicuro Analisi delle direttive formato in Common Lisp
- 5. Ottenere argomenti dalla riga di comando in Common Lisp
- 6. Stream in Common Lisp?
- 7. Esercizi Common Lisp/problemi
- 8. Moltiplicazione matrice in Common Lisp
- 9. Lunghezza variabile dell'elenco degli argomenti delle funzioni in Erlang
- 10. Ridenominazione lambda in Common Lisp
- 11. Sviluppo Web in Common Lisp
- 12. Elenco circolare in Common Lisp
- 13. Common Lisp definizione pacchetto
- 14. Libreria di differenziazione automatica in Schema/Common Lisp/Clojure
- 15. Common Lisp: Perché non la matrice letterale valuta gli argomenti?
- 16. Common lisp gray stream
- 17. Association nel Common Lisp
- 18. Introspezione di classe in Common Lisp
- 19. sezioni in stile Haskell in Common Lisp
- 20. Stato di reset in Common Lisp
- 21. Perché l'ordine degli argomenti delle funzioni è invertito?
- 22. Come esaminare l'elenco delle funzioni definite dal prompt Common Lisp REPL
- 23. Common Lisp equivalente a C enums
- 24. Common Lisp: cosa significa # + nil?
- 25. Problemi con ltk (common lisp)
- 26. pacchetti di statistiche per Common Lisp
- 27. Trasposizione di elenchi in Common Lisp
- 28. Disegno di alberi in Common Lisp
- 29. La migliore struttura web in Common-lisp?
- 30. loop su caratteri in stringa, Common Lisp
Swank come livello di compatibilità? Interessante – sabof