我用普通的lisp编写了这段代码(忽略了...,因为在这里粘贴这个部分没有意义)。Lisp的动态变量Case语句
(case turn
(*red-player* ...)
(*black-player* ...)
(otherwise ...))
红色玩家和黑球员使用defvar声明中定义的变量,为了C.
(defvar *red-player* 'r)
(defvar *black-player* 'b)
以“模拟” #define语句,你可以想象一下,当变量turn
收到*red-player*
的值('r)或*black-player*
的值('b)时,case语句无法正常工作,因为它预期该转折包含*red-player*
作为文字,而不是变量*red-player*
。
我知道我可以很容易地解决这个问题,使用cond或if + equal语句,因为变量的内容在那里被评估,但我很好奇。也许有一种方法可以在Lisp中创建类似C的宏,或者有某种特殊情况语句允许使用变量而不是文字。
预先感谢您!
试图在lisp中模拟C预处理器宏...多么讽刺。 – delnan 2010-12-18 19:04:55
它是什么类型的变量是没有区别的... – 2010-12-18 21:23:01