Подтвердить что ты не робот

Как увидеть docstrings и другую информацию о символах в Common Lisp REPL?

Я полностью знаком с CL, и я хотел бы узнать, как читать строки документации и получать другую справочную информацию из REPL. Что-то вроде help(symbol) в Python или symbol? в iPython, или :t и :i в Haskell GHCi.

Итак, учитывая имя символа, я хотел бы знать:

  • какое значение оно связано, если оно есть (функция, переменная, вообще нет)
  • Если это функция или макрос, то каковы его позиционные аргументы
  • если у него есть docstring, покажите его
  • какой пакет или файл он исходит или когда он был определен

Я обнаружил, что есть (documentation '_symbol_ '_type_), но это не совсем то, что мне нужно. Мне нужно знать тип значения, которому привязан символ ('function, 'variable, 'compiler-macro и т.д.), Прежде чем я смогу использовать documentation. Затем он возвращает только докструмент, он может отсутствовать или недостаточно для использования символа.

Например, в Lisp помощь для mapcar не очень полезна (CLisp REPL):

> (documentation 'mapcar 'function)
NIL

Я бы хотел увидеть что-то вроде этого:

>>> map?
Type:       builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form:    <built-in function map>
Namespace:  Python builtin
Docstring:
    map(function, sequence[, sequence, ...]) -> list

    Return a list of the results of applying the function to the items of
    the argument sequence(s).  If more than one sequence is given, the
    function is called with an argument list consisting of the corresponding
    item of each sequence, substituting None for missing values when not all
    sequences have the same length.  If the function is None, return a list of
    the items of the sequence (or a list of tuples if more than one sequence).
4b9b3361

Ответ 1

Как упоминалось, Common Lisp имеет стандартные функции: DESCRIBE, INSPECT и DOCUMENTATION. Типичные Lisp IDE также привязаны к ключам и меню.

Для стандартных функций Common Lisp большинство IDE напрямую ссылаются на общую документацию Lisp HyperSpec с нажатием клавиши.

Большинство IDE также имеют нажатия клавиш, чтобы отобразить arglist и документацию. Существует также функциональность "arglist on space".

Примеры конкретных LispWorks: Информация о списке аргументов LispWorks и Эксклюзивные выражения LispWorks меню

Я могу порекомендовать прочитать руководство по IDE для Slime, Редактор LispWorks, Allegro CL ELI или любой другой IDE, который вы используете.

Ответ 2

Относительно вашего вопроса о получении типа символа: такой вещи нет. Или, точнее, символы - это не просто имена других объектов, а сами объекты типа SYMBOL. Каждый символ может иметь как переменное значение, так и значение функции. Чтобы проверить, имеет ли значение переменной, BOUNDP и проверить значение функции FBOUNDP.