Как я могу получить спецификацию лямбда-списка некоторых параметров функции или, по крайней мере, несколько аргументов, которые она принимает?Сколько аргументов выполняет функция?
Например:
(defun a (a b))
(get-arg-list #'a) ;-> '(a b)
Как я могу получить спецификацию лямбда-списка некоторых параметров функции или, по крайней мере, несколько аргументов, которые она принимает?Сколько аргументов выполняет функция?
Например:
(defun a (a b))
(get-arg-list #'a) ;-> '(a b)
Common Lisp предоставляет функцию FUNCTION-LAMBDA-EXPRESSION
, которая может быть в состоянии восстановить исходное выражение, что затем включает лямбда-лист.
LispWorks определил функцию FUNCTION-LAMBDA-LIST
, которая возвращает arglist.
Многие другие реализации имеют некоторую форму функции ARGLIST
в некотором внутреннем пакете.
Многие пользователи Common Lisp используют SLIME, очень умное расширение редактора для редактора GNU Emacs. Он имеет бэкэнд для Common Lisp под названием SWANK. Источники SWANK предоставляют всевозможные интерфейсы для различных реализаций Common Lisp, включая получение arglist функций.
Это зависит от конкретной реализации, но эта функция CLHS может вам начать - http://clhs.lisp.se/Body/f_descri.htm
Самый простой способ сделать это - использовать библиотеку SWANK, которая используется SLIME.
Способ использовать это, чтобы загрузить SLIME, который легче всего сделать через Quicklisp:
(ql:quickload "swank")
Затем, вы можете получить список аргументов с помощью следующей функции:
CL-USER> (swank-backend:arglist #'a)
(A B)
Немного исправления, не может быстро загрузить «слизь», потому что у quicklisp нет этого int it по умолчанию Сделки рЕПО. Но я просто могу (ql: quickload «swank»). – Necto
Спасибо. Это очень верно. Это была опечатка. Я исправлю пост. –
Btw, знаете ли вы библиотеку, которая представила бы некоторый уровень абстракции для основных реализаций? – Necto
Привет Некто, пожалуйста, взгляните на другие ответы от Элиаса и Райнера. (Btw, Rainer имеет очень приятную страницу, не уверен, что она все еще в сети показывает всю хорошую славу Common Lisp) – malkia