вывести команды lisp на стандартный вывод

Существуют ли какие-либо команды, которые выводят все последующие команды lisp на стандартный вывод?

Я ищу что-то похожее на bash -x, но для какого-нибудь интерпретатора lisp (или какой-то разновидности lisp, в частности GNU Common Lisp).


person Pochi    schedule 04.10.2013    source источник
comment
Не могли бы вы немного пояснить? Когда вы говорите команды Lisp, вы имеете в виду то, что вы вводите в REPL (цикл чтения-оценки-печати) в интерактивном режиме? Это не совсем ответ, но последняя обработанная форма хранится в переменной +< /a>, и это может помочь реализовать эту функцию, если она еще не существует.   -  person Joshua Taylor    schedule 04.10.2013
comment
Что теперь? GNU Common Lisp или CLISP? Вы упоминаете GNU Common Lisp в вопросе, но помечаете вопрос как CLISP (который является еще одной реализацией Common Lisp).   -  person Rainer Joswig    schedule 04.10.2013
comment
Вы хотите использовать REPL в интерактивном режиме или используете Lisp в качестве языка сценариев? Последнее предложение в 32.6.2. Сценарии с помощью CLISP показывают способ написания сценариев, при котором каждое выходное значение будет напечатано. Возможно, вы сможете каким-то образом изменить его, чтобы увидеть ввод.   -  person Joshua Taylor    schedule 05.10.2013


Ответы (3)


Возможно, вы можете использовать DRIBBLE:

http://clhs.lisp.se/Body/f_dribbl.htm

person Lars Brinkhoff    schedule 04.10.2013

Если вы используете CLISP (реализация ANSI Common Lisp), прочтите справочную страницу. Также смотрите документацию для *load-print* и LOAD для любой реализации ANSI Common Lisp.

person Rainer Joswig    schedule 04.10.2013

Common Lisp сильно отличается от Bash. В нем нет «команд», как в Bash. В нем есть функции, макросы и специальные операторы. В то время как все команды Bash являются атомарными (с точки зрения текущего процесса Bash), в Lisp это относится только к примитивным функциям и специальным операторам. Все остальное строится из более простых частей.

Из-за этого прямой эквивалент функции Bash xtrace/-x не имел бы смысла в Lisp. Было бы полезно, если бы вы написали, какую проблему вы действительно хотите решить, а не просто спрашивали об очень конкретной функции. Возможно, вызов trace для интересующих вас функций может помочь?

person Rörd    schedule 04.10.2013
comment
Однако, если бы реализация предоставила крючки в свой REPL, добавление чего-то для печати текущей формы, которая должна быть оценена, ответило бы на вопрос ОП, я думаю. (Взглянув на исходный код CLISP, не видно, что в CLISP есть такая ловушка, но в некоторых реализациях она может быть.) - person Joshua Taylor; 05.10.2013
comment
@JoshuaTaylor: назначение параметра -x в Bash состоит в том, чтобы обеспечить полную трассировку всех команд, выполняемых сценарием. (Я не думаю, что это очень полезно, когда оболочка используется в интерактивном режиме.) Я попытался подчеркнуть в своем ответе, что такая функция не будет полезна в Лиспе, потому что она уведет вас глубоко в недра стандартной библиотеки. . И исходные формы обычно не оцениваются (например, из-за расширения макросов и компиляции в собственный код). Поэтому я предложил вместо этого trace конкретные интересующие функции. - person Rörd; 05.10.2013
comment
Поскольку OP упомянул bash -x, я предположил, что OP выполнял какие-то сценарии с помощью Lisp. Например, см. 32.6.2. Создание сценариев с помощью CLISP в руководстве по CLISP. Однако, перечитывая вопрос, это предположение может быть неоправданным. - person Joshua Taylor; 05.10.2013