Как получить доступ к ячейке функции символа Лисп - PullRequest
0 голосов
/ 13 февраля 2020

Если я создаю эту функцию

(defun a (&rest x)
    x)

У меня есть новая функция, которая имитирует функцию list. Как я прочитал, я сделал что-то с «функциональной ячейкой» символа a. До того, как я создал и оценил вышеописанную функцию, я бы получил

Symbol’s function definition is void: a

Если бы я попробовал что-то вроде (a 'b). Хорошо. Теперь, есть ли способ увидеть, что именно содержат эти ячейки символов, как они хранят plist, значение и, в моем случае, функцию, например, их структуры данных и как они соединены с символом? Я слышал, что вы можете на самом деле go в эти ячейки символов и манипулировать ими. Я использую elisp, но любые знания Lisp по этому вопросу будут оценены.

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

В Common Lisp можно использовать функцию describe для получения информации о символе:

* (defun a (&rest x)
    x)
A
* (describe 'a)
COMMON-LISP-USER::A
  [symbol]

A names a compiled function:
  Lambda-list: (&REST X)
  Derived type: (FUNCTION * (VALUES LIST &OPTIONAL))
  Source form:
    (LAMBDA (&REST X) (BLOCK A X))
1 голос
/ 13 февраля 2020

Вы хотите посмотреть на symbol-function, symbol-plist, symbol-value, symbol-macro-expand и symbol-macrolet.

В вашем примере:

(symbol-function 'a) =>
#<FUNCTION A (&REST X) (DECLARE (SYSTEM::IN-DEFUN A)) (BLOCK A X)>
...