Предикаты Common Lisp

Вы знаете, где я могу получить исходный код предиката в Common Lisp? (Содержимое предиката, если хотите.) Например, исходный код setq, string= и т. д.

Спасибо !


person lilawood    schedule 08.05.2011    source источник
comment
Как правило, это функция среды разработки Lisp (например, SLIME), которую вы используете. Вам также нужно будет установить исходный код вашего дистрибутива Lisp, чтобы иметь возможность перейти к нему.   -  person Bozhidar Batsov    schedule 09.05.2011


Ответы (3)


Среды разработки Common Lisp обычно позволяют искать определения в файле с исходным кодом.

Кроме того, FUNCTION-LAMBDA-EXPRESSION может восстановить источник предиката и других функций, если среда Lisp настроена на сохранение определений.

Вы также можете искать в lisp-файлах реализации lisp с открытым исходным кодом. Например, в Clozure CL setq определяется в файле compiler/nx1.lisp дистрибутива. Совет: поместите пробел перед искомым словом, чтобы обойти такие совпадения, как (setq.

person Terje Norderhaug    schedule 08.05.2011
comment
Спасибо ! Я не пользуюсь SLIME, но попробую. - person lilawood; 09.05.2011
comment
Это дает источник кода предиката, такого как setq, string-compare и т. д.? - person lilawood; 10.05.2011
comment
Я проверил, используя среду разработки MCLIDE lisp (тот же сервер, что и SLIME) с четырьмя различными реализациями Common Lisp: Clozure CL, SBCL, CLISP и MCL. Ни один из них не смог найти определение SETQ (даже если в Clozure есть определение вcompiler/nx1.lisp). Только Clozure и MCL смогли найти определение STRING=. Возможно, вам повезет больше, если вы выйдете за рамки основных функций. - person Terje Norderhaug; 10.05.2011

По крайней мере, для SBCL SLIME может искать определения, нажимая «M-.», однако вам нужно скомпилировать SBCL из исходного кода, чтобы это работало, так как путь к исходным определениям встроен в двоичный файл, и если вы используете бинарный дистрибутив, у вас, вероятно, не будет исходных файлов в том же месте.

person Elias Mårtenson    schedule 10.05.2011

SETQ не является предикатом. Это даже не функция, поэтому вы не смогли найти ее через IDE. STRING= — это предикат и функция, поэтому работает лучше.

Вы имеете в виду "примитивный"? для "предиката"?

person mtraven    schedule 10.05.2011
comment
Я ищу источник функции типа STRING=, CHAR=... извините за эту ошибку. - person lilawood; 10.05.2011