Компиляция кода Lisp с макросами чтения

У меня есть некоторые проблемы с пониманием того, что происходит с макросами чтения при компиляции файла кода lisp в байт-код или необработанную сборку (или файл fasl, если на то пошло ). А может я понимаю, но не знаю. Я просто в замешательстве.

Когда вы используете макрос чтения, разве вам не нужен доступ к исходному коду?

Если вы это сделаете, то вы должны выполнять исходный код, который составляет функцию макроса чтения. Если нет,тогда как они могут работать, когда вы можете делать такие вещи, как read-char?

Для этого, если вы хотите, чтобы макрос чтения использовал ранее определенные переменные, вы должны выполнять весь код перед ним, так что это становится временем выполнения, которое все портит.

Если вы не запустите код перед ним, то вещи, определенные выше, будут недоступны.

Как насчет функций или макросов компилятора, определяющих макросы чтения? Я бы предположил, что они вообще не будут работать, если вы не requireили loadфайл или что-то, что не скомпилировано. Но если бы они были скомпилированы, то они бы не смогли их использовать?

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

Короче говоря, похоже, что для компиляции одной строки в форму, в которой ее можно выполнить без дальнейшей обработки макросов или чего-то еще, вам нужно прочитать, скомпилировать и запустить предыдущие строки.

Помните еще раз, что эти вопросы относятся к компиляции lisp, а не к его интерпретации, где вы можете запускать каждую строку по мере ее поступления.

Извините за бессвязность, но я новичок в lisp и хочу узнать больше, как это работает.

7
задан Rainer Joswig 23 October 2016 в 10:48
поделиться