我在常见的lisp中编写了这段代码(忽略了......因为在这里粘贴该部分毫无意义).
(case turn
(*red-player* ...)
(*black-player* ...)
(otherwise ...))
Run Code Online (Sandbox Code Playgroud)
red-player和black-player是使用defvar语句定义的变量,用于"模拟"C中的#define语句.
(defvar *red-player* 'r)
(defvar *black-player* 'b)
Run Code Online (Sandbox Code Playgroud)
可以想象,当变量turn接收到*red-player*的值('r)或*black-player*'s'('b)时,case语句无法正常工作,因为它期望转换包含*red-player*为文字,而不是变量*red-player*.
我知道我可以使用cond或if + equal语句轻松修复它,因为变量的内容在那里被评估,但我很好奇.也许有一种方法可以在Lisp中创建类似C的宏,或者有某种特殊的case语句允许使用变量而不是文字.
先感谢您!