|
|
1
17
请记住,宏返回要计算的表达式。为此,您必须反向报价:
|
|
|
2
13
而不是varname++或++varname,我想这是您想要的。我不知道你是否能得到前者,但对于后者,你可以做一个读取宏。由于它是两个字符,分派宏可能是最好的。未经测试,因为我没有一个方便的运行lisp,但类似于:
阅读 |
|
|
3
11
语法
做一个完全防弹的
要做到这一点,我们必须求助于Lisp的“分配位置分析器”,称为
使用CLISP进行一些测试。(注:扩展依赖于来自
下面是一个关键的测试用例。在这里,位置包含一个副作用:
那么首先发生的是
|
|
|
4
10
如果需要简单的后期增量,请尝试以下操作:
|
|
|
5
7
然而,如果你真的在寻找语义,你已经得到了前面提到的前缀版本,但是后缀版本在语法上并不容易匹配。你可以用足够多的读者黑客来做,但这并不漂亮。 如果这就是你想要的,我建议a)坚持使用incf/decf名称,因为它们是惯用的并且工作良好;b)编写post-incf,post-decf版本,例如(defmacro-post-incf(x)`(prog1,x(incf,x))之类的东西。
|
|
|
6
5
对于增量后,您可以使用以下内容(来自票价UTIL):
|
|
|
7
2
虽然我肯定会记住这些话,并提醒大家 西蒙 在他的帖子评论中,我真的认为 用户10029 的方法仍然值得一试,因此,为了好玩,我尝试将其与公认的答案结合起来,以使 ++x 操作员工作(即,在1中增加x的值)。试试看!
解释
:Good old SBCL不会编译其版本,因为必须在dispatch char lookup表上使用显式设置“+”符号
此实现的结果是不再理解像+123这样的数字条目(调试器使用
干杯
|
|
|
8
-2
这应该可以做到,但是我不是一个口齿不清的大师。
|
|
|
Stephen · 在emacs中评估Lisp的正确方法是什么 1 年前 |
|
|
lightning_missile · 词法范围和共享对象 8 年前 |
|
|
Alexandru Popa · SBCL中奇怪的宏扩展错误 8 年前 |
|
|
Jacky · 编辑列表中的每个偶数索引元素 8 年前 |
|
|
HappyFace · lisp典型缩进约定背后的规则是什么? 8 年前 |