Hoeveel argumenten neemt een functie?

Hoe kan ik een lambda-lijst specificeren van een aantal functieparameters, of op zijn minst een aantal argumenten die het neemt?

Bijvoorbeeld:

(defun a (a b) )
(get-arg-list #'a) ;-> '(a b)
3

3 antwoord

Common Lisp biedt de functie FUNCTION-LAMBDA-EXPRESSION die mogelijk de bronuitdrukking kan herstellen, die dan de lambda-lijst bevat.

LispWorks heeft een functie FUNCTION-LAMBDA-LIST gedefinieerd die de arglist retourneert.

Veel andere implementaties hebben een bepaalde vorm van ARGLIST -functie in een of ander intern pakket.

Veel Common Lisp-gebruikers gebruiken SLIME, een zeer slimme editor-extensie voor de GNU Emacs-editor. Het heeft een backend voor Common Lisp genaamd SWANK. De SWANK-bronnen bieden allerlei interfaces naar de verschillende Common Lisp-implementaties, waaronder het verkrijgen van de lijst met functies.

4
toegevoegd

This is implementation specific, but this CLHS function might get you started - http://clhs.lisp.se/Body/f_descri.htm

2
toegevoegd
Trouwens, ken je een bibliotheek, die wat abstractieniveau zou introduceren voor grote implementaties?
toegevoegd de auteur Necto, de bron
Hallo Necto, kijk eens naar de andere antwoorden van Elias en Rainer. (Btw, Rainer heeft een hele mooie pagina, ik weet niet zeker of het nog steeds online is met alle goede glorie van Common Lisp)
toegevoegd de auteur malkia, de bron

De eenvoudigste manier om dit te doen is om de SWANK-bibliotheek te gebruiken die wordt gebruikt door SLIME.

De manier om het te gebruiken is om SLIME te laden, wat het gemakkelijkst gedaan kan worden via Quicklisp:

(ql:quickload "swank")

Vervolgens kunt u de argumentenlijst ophalen met behulp van de volgende functie:

CL-USER> (swank-backend:arglist #'a)
(A B)
1
toegevoegd
Een beetje rectificatie, een kan "slijm" niet snel laden, omdat quicklisp het niet heeft in zijn standaard repo. Maar ik kan het gewoon (ql: quickload "swank").
toegevoegd de auteur Necto, de bron
Dank je. Dat is helemaal waar. Het was een typfout. Ik zal het bericht repareren.
toegevoegd de auteur Elias Mårtenson, de bron