问题标签 [reader-macro]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
lisp - 阅读宏:你用它们做什么?
我正在尝试了解 Lisp 中到目前为止我还没有使用多少的部分。读取宏目前引起了我的注意。没有关于它们使用的大量信息,这将有助于了解人们对它们做了什么,既可以获取它们如何工作的示例,也可以了解它们可以解决哪些类型的问题。在此之后,是否有任何指导方针可以了解什么是读取宏的好坏使用?
clojure - 常见的 lisp 阅读器宏有哪些 Clojure 没有的优势?
我最近一直在使用 Clojure,但我仍然不明白我没有得到常见的 lisp 阅读器宏提供的功能。可以用简单的方式向我解释一下吗?
lisp - .sbclrc 中的运算符 #+ 和 #-
有谁知道#+
和#-
运营商是什么意思.sbclrc
?我在手册中找不到。我#-
在.sbclrc
安装 quicklisp 后看到:
我也在#+
SBCL 用户手册中看到,但我找不到它们的功能解释。看起来与加载单个模块有关。
它们仅用于 SBCL 实现还是 Common lisp 的一部分?
lisp - 在 Common Lisp 中管理阅读器宏
我想以仅影响某个包/文件的方式定义阅读器宏。
到目前为止,我能够加载这些文件
有更好的方法吗?
compiler-construction - 使用读取宏编译 Lisp 代码
在将 lisp 代码文件编译为字节码或原始程序集(或 fasl 文件)时,我在理解读取宏的内容时遇到了一些麻烦。或者也许我确实明白但不知道。我真的很困惑。
当您使用读取宏时,您不必提供可用的源吗?
如果这样做,那么您必须执行构成读取宏功能的源代码。如果您不这样做,那么当您可以做类似的事情时,它们如何工作read-char
?
要做到这一点,如果你想让 read 宏使用预先定义的变量,你必须执行它之前的所有代码,所以这变成了运行时,一切都搞砸了。
如果你不运行它之前的代码,那么上面定义的东西将不可用。
定义读取宏的函数或编译器宏呢?我会假设它们根本不起作用,除非您require
或load
文件或未编译的东西。但是如果他们被编译了,那么他们将无法使用它们吗?
如果我的一些猜测是正确的,那么这意味着“宏可以使用哪些数据”和“函数可以使用哪些宏”之间存在很大差异,这取决于您是编译整个文件以便稍后运行还是一次解释一行文件(即读取、编译和评估一个又一个表达式)。
简而言之,似乎要将一行编译为无需进一步宏处理或其他任何内容即可执行的形式,您必须阅读、编译和运行前面的行。
再次记住,这些问题适用于编译 lisp,而不是解释它,你可以在它进入时运行每一行。
很抱歉我的漫无边际,但我是 lisp 的新手,想了解更多它是如何工作的。
common-lisp - Common lisp:有没有一种不那么痛苦的输入数学表达式的方法?
我喜欢普通的 lisp,但有时输入简单的数学表达式真的很痛苦,比如
(当然我可以转换这个,但它有点慢,我先写(+()()),然后在每个括号中我放(*()())......)
我想知道这里是否有人知道输入此内容的更好方法。我在考虑写一个数学宏,在哪里
扩展到
但是对于名称很长的变量,解析是一个问题。
有人有更好的建议吗?
debugging - 阅读器宏调试
情况如下:
Clsql 的 [] reader 宏的行为与 sql-expression 不同。我宁愿在宏中使用 sql-expression,因为 reader 宏可能会在那里表现得很奇怪。我尝试了macroexpand-1,但我猜它没有足够早地捕捉到扩展。如何探索阅读器宏的工作原理?
编辑:为我的 clsql 问题找到了解决方案:
我仍然想知道读取宏的事情。
lisp - 定义我自己的读取宏
Common Lisp 中有一些读宏,例如'
#'
#P
,但是我怎样才能写一个读宏呢?
像这样:
clojure - 是否有 if-clojurescript 宏?
是否有 Clojure 和 ClojureScript 的宏允许您根据文件是在 Clojure 还是 Clojurescript 中编译来插入不同的表达式?
本质上,我正在寻找类似于#ifdef SOME_PLATFORM
您可能会看到散布在 C/C++ 代码周围的宏之类的东西。我认为它对于我想成为交叉部分的文件可能很有用,但该文件的一小部分在 Clojure/ClojureScript 之间不兼容。
lisp - 为什么阅读器宏扩展不传播到运行时(读取)?
为什么以下不起作用?
然后: