2011-04-14 34 views
2

我目前正在研究一个宏/函数,我将用它作为声明列表的替代方法,即使用[和]而不是通常的'(abc)方法来做到这一点。强制Common Lisp不要将符号评估为变量

虽然我遇到了一些问题,即我总是必须在符号前面写引号(因为它们没有绑定到变量,我得到一个错误信息),我将如何去除这些需求报价?

此外,我想介绍这种替代方法来声明在Common Lisp中的列表的主要原因是它有时倾向于与括号混淆,如果我真的想调用我的函数/宏,我需要附上它与parens,我会如何去除这些需求?

谢谢!

+0

你能发表一些代码吗?你可能想看看读者宏是否使用'[]'而不是'()'的实际任务。看看这里,有一个确切的例子:http://www.psg.com/~dlamkins/sl/chapter03-12.html – spacemanaki 2011-04-14 16:50:35

回答

4

你可以用读取器宏来做到这一点。 (顺便说一下,R​​eader宏与“普通”宏完全不同)。

但是,在您仔细阅读可读表之前,我强烈建议您学习Lisp。不要打括号!它们是您拥有的唯一语法,请使用它们!

为了学习,我推荐Peter Seibel的"Practical Common Lisp"

+0

是的,读者宏是绝对要走的路。可能需要调用READ-DELIMITED-LIST和一些调用SET-SYNTAX-FROM-CHAR。可能是一个体面的困难,“首先关于readtable”的项目,但我同意应对CL是应该首先考虑的问题。 – Vatine 2011-04-15 10:47:25

+0

Johan,如果你打算使用@ Svante的代码不只是一次性使用,我建议你看看这个库:https://common-lisp.net/project/named-readtables/。它允许您在指定的表中打包阅读器宏,提供defpackage为符号提供的组织类型。 我在这里写了一些代码(https://bitbucket.org/blevyq/short-lambda),它使用命名的readtables为#\\ [和#\\]定义了读者宏。它可能会为您的宏提供一个很好的起点。 – brian 2015-11-29 23:42:55