我有点难以理解在将lisp代码编译成字节码或原始汇编(或fasl文件)时,读取宏的处理方式。也许我理解了但不确定。我很困惑。
当你使用读取宏时,难道不需要可用的源代码吗?
如果需要,那么您必须执行组成读取宏函数的源代码。如果不需要,那么像read-char这样的操作怎么可能有效呢?
为了实现这一点,如果你想要读取宏使用预定义变量,你必须执行它之前的所有代码,所以这变成了运行时,这会破坏一切。
如果你不运行它之前的代码,那么在它上面定义的内容将无法使用。
那么定义读取宏的函数或编译器宏呢?我认为除非你要求或加载一个未编译的文件,否则它们根本不起作用。但是如果它们被编译了,那么就不能使用它们?
如果我的一些猜测是正确的,那么它意味着“哪些数据将可用于宏”和“哪些宏将可用于函数”之间存在很大差异,具体取决于您是编译整个文件以便以后运行还是逐行解释文件(也就是说,读取、编译和评估一个表达式接一个表达式)。
简而言之,似乎要将一行编译成可以在没有进一步宏处理或其他处理的情况下执行的形式,您必须读取、编译并运行前面的行。
请记住,这些问题适用于编译lisp,而不是解释它,您可以按照每行输入的方式运行它。
对不起,我说了很多废话,但我是lisp的新手,想更多地了解它的工作原理。
当你使用读取宏时,难道不需要可用的源代码吗?
如果需要,那么您必须执行组成读取宏函数的源代码。如果不需要,那么像read-char这样的操作怎么可能有效呢?
为了实现这一点,如果你想要读取宏使用预定义变量,你必须执行它之前的所有代码,所以这变成了运行时,这会破坏一切。
如果你不运行它之前的代码,那么在它上面定义的内容将无法使用。
那么定义读取宏的函数或编译器宏呢?我认为除非你要求或加载一个未编译的文件,否则它们根本不起作用。但是如果它们被编译了,那么就不能使用它们?
如果我的一些猜测是正确的,那么它意味着“哪些数据将可用于宏”和“哪些宏将可用于函数”之间存在很大差异,具体取决于您是编译整个文件以便以后运行还是逐行解释文件(也就是说,读取、编译和评估一个表达式接一个表达式)。
简而言之,似乎要将一行编译成可以在没有进一步宏处理或其他处理的情况下执行的形式,您必须读取、编译并运行前面的行。
请记住,这些问题适用于编译lisp,而不是解释它,您可以按照每行输入的方式运行它。
对不起,我说了很多废话,但我是lisp的新手,想更多地了解它的工作原理。