Как просмотреть строки документации и другую символьную информацию в Common Lisp REPL? - PullRequest
25 голосов
/ 23 февраля 2011

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

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

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

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

Например, в Лиспе помощь для mapcar не очень полезна (CLLp's 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).

Ответы [ 2 ]

28 голосов
/ 23 февраля 2011

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

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

Большинство IDE также отображают нажатия клавиш.Арглист и документация.Существует также функция 'arglist on space'.

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

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

6 голосов
/ 23 февраля 2011

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

...